簡體   English   中英

將元素列表放入元組python列表中

[英]list of ints into a list of tuples python

[1, 109, 2, 109, 2, 130, 2, 131, 2, 132, 3, 28, 3, 127]我有這個數組,我想把它變成一個元組列表,每個元組有2個值因此該列表變為[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]

您可以使用zip結合切片來創建新的元組 列表

my_new_list = zip(my_list[0::2], my_list[1::2])

這將生成具有以下輸出的新列表

[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]

這背后的過程非常簡單。 我們首先使用切片將現有列表拆分為兩個新列表。

print my_list[0::2] # [1, 2, 2, 2, 2, 3, 3]
print my_list[1::2] # [109, 109, 130, 131, 132, 28, 127]

然后使用zip將這兩個列表組合成一個元組列表。

print zip(my_list[0::2], my_list[1::2])
>>> it = iter(L)
>>> zip(*[it]*2)
[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]

說明

it = iter(L)在初始列表中創建迭代器

[it]*2包含兩次相同迭代器的列表。

*在參數的第一個位置用於解壓縮參數,以便zip(*[it]*2)變成zip(it,it) 雖然你可以使用zip(it,it)zip(*[it]*2)是一個更通用的結構,可以擴展到結果元組中的任意數量的值。

這種方法的核心是每次迭代的zip都試圖從每個參數中獲取一個值。 但事實證明,所有參數實際上都是相同的迭代器,因此每次都會產生一個新值。

另一種方法:

lst = [1, 109, 2, 109, 2, 130, 2, 131, 2, 132, 3, 28, 3, 127]

print [(lst[i], lst[i + 1]) for i in xrange(0, len(lst), 2)]
#[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]

受ovgolovin的回答啟發:

>>> it=iter(L)
>>> [(el, next(it)) for el in it]
[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]

可能會更容易看出它是如何工作的。 也可以反轉元組順序:

>>> it=iter(L)
>>> [(next(it), el) for el in it]
[(109, 1), (109, 2), (130, 2), (131, 2), (132, 2), (28, 3), (127, 3)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM