使用枚举内部列表理解的Python使用枚举内部列表理解的Python(Python using en

2019-05-16 13:58发布

让我们假设我有一个这样的名单:

mylist = ["a","b","c","d"]

相处与他们的索引,我可以使用Python的印刷值enumerate函数这样

>>> for i,j in enumerate(mylist):
...     print i,j
...
0 a
1 b
2 c
3 d
>>>

现在,当我尝试使用它里面一个list comprehension它给了我这个错误

>>> [i,j for i,j in enumerate(mylist)]
  File "<stdin>", line 1
    [i,j for i,j in enumerate(mylist)]
           ^
SyntaxError: invalid syntax

所以,我的问题是:什么是用枚举内部列表中理解的正确方法是什么?

Answer 1:

试试这个:

[(i, j) for i, j in enumerate(mylist)]

你需要把i,j元组中的列表解析工作。 另外,考虑到enumerate() 已经返回一个元组,可以直接返回它没有先拆包:

[pair for pair in enumerate(mylist)]

无论哪种方式,得到返回的结果是按预期:

> [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]


Answer 2:

只要是真正清楚,这已经无关enumerate和一切与列表中理解语法。

这个列表理解返回元组的列表:

[(i,j) for i in range(3) for j in 'abc']

这个类型的字典列表:

[{i:j} for i in range(3) for j in 'abc']

列表的列表:

[[i,j] for i in range(3) for j in 'abc']

语法错误:

[i,j for i in range(3) for j in 'abc']

这是不一致的(恕我直言)和混乱与字典推导语法:

>>> {i:j for i,j in enumerate('abcdef')}
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f'}

和一组元组:

>>> {(i,j) for i,j in enumerate('abcdef')}
set([(0, 'a'), (4, 'e'), (1, 'b'), (2, 'c'), (5, 'f'), (3, 'd')])

奥斯卡·洛佩斯说,你可以直接通过枚举元组:

>>> [t for t in enumerate('abcdef') ] 
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f')]


Answer 3:

或者,如果你不坚持使用列表理解:

>>> mylist = ["a","b","c","d"]
>>> list(enumerate(mylist))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]


Answer 4:

如果您使用长的列表,它出现在列表解析的速度更快,更不要说更具有可读性。

~$ python -mtimeit -s"mylist = ['a','b','c','d']" "list(enumerate(mylist))"
1000000 loops, best of 3: 1.61 usec per loop
~$ python -mtimeit -s"mylist = ['a','b','c','d']" "[(i, j) for i, j in enumerate(mylist)]"
1000000 loops, best of 3: 0.978 usec per loop
~$ python -mtimeit -s"mylist = ['a','b','c','d']" "[t for t in enumerate(mylist)]"
1000000 loops, best of 3: 0.767 usec per loop


Answer 5:

这里有一个办法做到这一点:

>>> mylist = ['a', 'b', 'c', 'd']
>>> [item for item in enumerate(mylist)]
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]

或者,你可以这样做:

>>> [(i, j) for i, j in enumerate(mylist)]
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]

你有一个错误的理由是,你错过了()围绕ij使它成为一个元组。



Answer 6:

更明确一些元组。

[(i, j) for (i, j) in enumerate(mylist)]


Answer 7:

所有伟大的答案家伙。 我知道这里的问题是特定于枚举但如何对这样的事情,只是另一个角度

from itertools import izip, count
a = ["5", "6", "1", "2"]
tupleList = list( izip( count(), a ) )
print(tupleList)

它变得更加强大,如果一个人有迭代并行多个列表在性能方面。 只是一个想法

a = ["5", "6", "1", "2"]
b = ["a", "b", "c", "d"]
tupleList = list( izip( count(), a, b ) )
print(tupleList)


文章来源: Python using enumerate inside list comprehension