我正在尝试使用enumerate
来迭代列表并存储列表的元素,并使用索引来获取相同大小的另一个列表的索引。
使用一个愚蠢的例子:
animal = ['cat', 'dog', 'fish' , 'monkey']
name = ['george', 'steve', 'john', 'james']
x = []
for count, i in enumerate(animal):
y = zip(name[count], i)
x = x +y
而不是生成两个列表中每个元素的元组。它通过字母生成元组。有没有办法做到这一点,但获取每个列表的元素而不是每个字母?我知道有更好的更多pythonic方式来完成同样的任务,但我特别希望这样做。
答案 0 :(得分:4)
enumerate()
没有这样做。你在这里配对字母:
y = zip(name[count], i)
例如,对于animal
中的第一个元素,count
为0
,i
设置为'cat'
。 name[0]
为'george'
,因此您要求Python zip()
'george'
和'cat'
:
>>> zip('george', 'cat')
[('g', 'c'), ('e', 'a'), ('o', 't')]
这限制了较短的字长。
如果你想要一个元组,只需使用:
y = (name[count], i)
然后将追加添加到您的x
列表中:
x.append(y)
您可以使用zip()
代替enumerate()
来创建您的配对:
x = zip(name, animal)
不需要任何循环:
>>> animal = ['cat', 'dog', 'fish' , 'monkey']
>>> name = ['george', 'steve', 'john', 'james']
>>> zip(name, animal)
[('george', 'cat'), ('steve', 'dog'), ('john', 'fish'), ('james', 'monkey')]
答案 1 :(得分:1)
使用zip()
时,它实际上会在每个索引处创建相应元素的元组列表。
因此,当您提供strings
作为输入时,它会将结果作为每个字符的元组列表提供。示例 -
>>> zip('cat','george')
[('c', 'g'), ('a', 'e'), ('t', 'o')]
当你迭代列表中的每个元素并使用zip时,这就是你正在做的。
相反,您应该直接使用zip
,而不必迭代列表中的元素。
示例 -
>>> animal = ['cat', 'dog', 'fish' , 'monkey']
>>> name = ['george', 'steve', 'john', 'james']
>>> zip(animal,name)
[('cat', 'george'), ('dog', 'steve'), ('fish', 'john'), ('monkey', 'james')]