簡體   English   中英

枚舉是迭代列表中的字符串字母而不是元素

[英]enumerate is iterating of letters of strings in a list instead of elements

我正在嘗試使用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 方式來完成同樣的任務,但我特別希望這樣做。

enumerate()沒有做這樣的事情。 你在這里配對字母:

y = zip(name[count], i)

例如,對於animal的第一個元素, count0並且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')]

當您使用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')]

暫無
暫無

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

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