我有一个元组列表,我想将每个元组的第一个元素提取到另一个列表中。 我有一个名为' list'的元组列表。并尝试将元素提取到名为' list2'的列表中。而我得到的是:
>>> list = [ (1,2), (3,4), (5,6)]
>>> list2 = []
>>> list2 = []
>>> [list2[i] = list[i][0] for i in range(len(list))]
File "<stdin>", line 1
[list2[i] = list[i][0] for i in range(len(list))]
^
SyntaxError: invalid syntax
你们可以帮助弄清楚这种语法有什么问题吗?
答案 0 :(得分:3)
使用lst
和lst2
作为变量名称,其他人注意到list
是一个糟糕的选择。
您不需要索引。使用索引通常被视为不良形式。
lst2 = [ pair[0] for pair in lst]
如果你真的,真的需要索引,某些数学或其他东西。
lst2 = [ lst[i][0] for (i, pair) in enumerate(lst)]
如果您需要操纵数字的二维矩阵,您可能想要了解numpy
并查看numpy.matrix
和numpy.array
。
答案 1 :(得分:0)
在列表理解中,只有表达式可以来。 list2[i] = list[i][0]
是一项作业声明。
并且,您不需要使用索引来访问项目。只需重复列表。
>>> lst = [ (1,2), (3,4), (5,6)]
>>> lst2 = [x[0] for x in lst]
>>> lst2
[1, 3, 5]
顺便说一句,不要使用list
作为变量名。它影响内置类型/功能list
。
答案 2 :(得分:0)
您无法使用等号运算符设置变量,同时循环显示一行中的列表。你可以这样做:
list = [ (1,2), (3,4), (5,6)]
list2 = []
[list2.append(list[i]) for i in range(len(list))]
答案 3 :(得分:0)
另一种方法是使用zip()
:
>>> lst = [(1,2), (3,4), (5,6)]
>>> zip(*lst)
[(1, 3, 5), (2, 4, 6)]
>>> zip(*lst)[0]
(1, 3, 5)
>>> list(zip(*lst)[0])
[1, 3, 5]
但是,只需要一个列表就会有点浪费。