假设我有一个这样的列表:
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
所以,我的问题是:在列表理解中使用枚举的正确方法是什么?
发布于 2012-05-28 05:27:35
需要明确的是,这与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']
这与字典理解语法不一致(IMHO)且令人困惑:
>>> {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')]
发布于 2012-05-28 05:18:28
或者,如果您不坚持使用列表理解:
>>> mylist = ["a","b","c","d"]
>>> list(enumerate(mylist))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
发布于 2012-05-28 05:05:27
这里有一种方法:
>>> 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')]
你得到一个错误的原因是你错过了i
和j
周围的()来使它成为一个元组。
https://stackoverflow.com/questions/10777271
复制相似问题