将元素列表放入元组python列表中

mii*_*iik 6 python list

[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)]

ean*_*son 12

您可以使用zip结合切片来创建新的元组列表.

my_new_list = zip(my_list[0::2], my_list[1::2])
Run Code Online (Sandbox Code Playgroud)

这将生成具有以下输出的新列表

[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]
Run Code Online (Sandbox Code Playgroud)

这背后的过程非常简单.我们首先使用切片将现有列表拆分为两个新列表.

print my_list[0::2] # [1, 2, 2, 2, 2, 3, 3]
print my_list[1::2] # [109, 109, 130, 131, 132, 28, 127]
Run Code Online (Sandbox Code Playgroud)

然后使用zip将这两个列表组合成一个元组列表.

print zip(my_list[0::2], my_list[1::2])
Run Code Online (Sandbox Code Playgroud)


ovg*_*vin 9

>>> it = iter(L)
>>> zip(*[it]*2)
[(1, 109), (2, 109), (2, 130), (2, 131), (2, 132), (3, 28), (3, 127)]
Run Code Online (Sandbox Code Playgroud)

说明

it = iter(L) 在初始列表上创建迭代器

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

*在参数的第一个位置使用的用于解压缩参数,以便zip(*[it]*2)变为zip(it,it).虽然你可以使用zip(it,it),但它zip(*[it]*2)是一种更通用的结构,它可以扩展到结果元组中的任意数量的值.

这种方法的核心是zip每次迭代都试图从每个参数中获取一个值.但事实证明,所有参数实际上都是相同的迭代器,因此每次都会产生一个新值.