我有值列表的郵編項目從列表中蟒
[43.4543, 23.45343, 76.55665, 33.4345, 5]
我需要壓縮它通過以下方式,
[(43.4543,23.45343,5),(76.55665,33.4345,5)]
任何人都可以引導我解決這個?
我有值列表的郵編項目從列表中蟒
[43.4543, 23.45343, 76.55665, 33.4345, 5]
我需要壓縮它通過以下方式,
[(43.4543,23.45343,5),(76.55665,33.4345,5)]
任何人都可以引導我解決這個?
zip
將返回一個長度等於最短輸入序列長度的列表。由於最後一個(A[-1:]
)只有1個元素,所以不能使用zip。嘗試一下不同的東西。
a = [43.4543, 23.45343, 76.55665, 33.4345, 5]
map(lambda x: x + (a[-1],), zip(a[::2], a[1::2]))
或者,作爲一個列表理解:在zip(a [: - 1:2],a [1:-1:2])]' –
P = zip(A[::2], A[1::2], A[-1:]*2)
應該得到所需要的輸出
您可以使用zip
與itertools.repeat
:
>>> from itertools import repeat
>>> l = [43.4543, 23.45343, 76.55665, 33.4345, 5]
>>> it = iter(l)
>>> list(zip(it, it, repeat(l[-1])))
[(43.4543, 23.45343, 5), (76.55665, 33.4345, 5)]
''repeat'中的x [(a [-1]是比「循環」更明智的選擇。爲什麼我沒有想到這個? :) –
我不知道你爲什麼要在這裏使用zip
。對於給定的數據你可以組裝所需的輸出是這樣的:
p = [a[:2] + a[-1:], a[2:]]
如果列表中的項目必須是元組:
p = [tuple(u) for u in (a[:2] + a[-1:], a[2:])]
但是你可以用zip
和itertools.cycle
from itertools import cycle
a = [43.4543, 23.45343, 76.55665, 33.4345, 5]
p = zip(a[::2], a[1::2], cycle(a[-1:]))
print(list(p))
做
輸出
[(43.4543, 23.45343, 5), (76.55665, 33.4345, 5)]
這將適用於奇數長度的任何a
。
而不是使用itertools.cycle
,您可以使用itertools.repeat
,如在niemmi的答案。
另一種選擇是與源列表的迭代器ZIP:
from itertools import repeat
a = range(11)
head, tail = iter(a), a[-1]
p = zip(head, head, repeat(tail))
print(list(p))
輸出
[(0, 1, 10), (2, 3, 10), (4, 5, 10), (6, 7, 10), (8, 9, 10)]
@ PM2Ring是完全相同。有一個錯字 –
你能否澄清你正在嘗試完成的* general *任務是什麼?基於切片,你似乎試圖分裂均勻和奇怪索引的元素,但與輸出示例不匹配。爲什麼最後一個元素會在輸出的兩半中結束? – jonrsharpe
問題不清楚。請編輯您的問題與預期的輸出 –