【问题标题】:enumerate is iterating of letters of strings in a list instead of elementsenumerate 是迭代列表中的字符串字母而不是元素
【发布时间】:2015-09-01 15:34:16
【问题描述】:

我正在尝试使用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() 是不迭代字母。另一方面,zip() 是。
  • name[count] 是字符串 'george'、'steve' 等之一。字符串是可迭代的。你希望这段代码做什么?
  • 我想你只需要zip(animal, name),还是不需要?

标签: python list enumerate


【解决方案1】:

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

【讨论】:

  • 这是完美的,一旦允许我就会接受它!谢谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2013-01-15
    • 2019-01-19
    • 1970-01-01
    • 2015-05-15
    • 2020-06-22
    相关资源
    最近更新 更多