我有一个列表,其结构如下:
a = [[1,'a'], [2,'b'], [3,'c']]
我想在每个子列表中创建第一个元素的范围而不进行第二个for循环。我在考虑这样的事情:
for i in a[][0]:
print i
但是,上面的最后一个代码不起作用(SyntaxError: invalid syntax
)。有没有想过是否可以在Python中执行此操作?
编辑:
我想通过上述循环获得的输出是:
1
2
3
而不是
1
a
答案 0 :(得分:4)
for sublist in a:
print sublist[0]
要构建第一项的列表,请使用列表推导:
first_items = [sublist[0] for sublist in a]
答案 1 :(得分:1)
for i,_ in a:
print i
应该做的伎俩
答案 2 :(得分:1)
对于这样一个简单的例子来说,这可能有点过头了,但对于多样性:
for i in map(operator.itemgetter(0), a):
print i
在Python 2 map
中构建了第一个元素的完整列表。您可以使用itertools.imap
来避免这种情况。当然对于3个元素无论如何都无关紧要。
我之所以提到这一点,是因为它比for i, _ in a
更灵活(每个子列表中不需要精确的两个元素),它会为您提供所需的i
而不是for i in a
并使用i[0]
(可能在一个不太简单的例子中多次)。但当然,您可以轻松获得所需的i
:
for l in a:
i = l[0]
print i
...并非所有都需要在循环标题中完成,它可以可以是: - )
答案 3 :(得分:1)
>>> a = [[1,'a'], [2,'b'], [3,'c']]
>>> for i in a:
... print i[0]
...
1
2
3
我认为这种方法与您尝试的方法很接近。
答案 4 :(得分:0)
>>> a = [[1,'a'], [2,'b'], [3,'c']]
>>> for [x,y] in a:
... print(x)
...
1
2
3
但是,如果你的名单大小不一致,那么@ warwaruk的回答会更好。