54

如果我有一个列表列表并且只想操作该列表中的单个项目,我将如何去做呢?

例如:

List1 = [[10,13,17],[3,5,1],[13,11,12]]

如果我想取一个值(比如 50)并只查看 中的第一个子列表List1,然后减去 10(第一个值),然后加上 13,然后减去 17,该怎么办?

4

7 回答 7

66

您可以通过首先指定您感兴趣的列表然后指定您想要该列表的哪个元素来访问列表列表中的元素。例如,是list17中的元素,即:20list1[0][2]

>>> list1 = [[10,13,17],[3,5,1],[13,11,12]]
>>> list1[0][2]
17

所以,你的例子是

50 - list1[0][0] + list1[0][1] - list1[0][2]
于 2013-08-26T17:15:09.013 回答
5

您可以使用itertools.cycle

>>> from itertools import cycle
>>> lis = [[10,13,17],[3,5,1],[13,11,12]]
>>> cyc = cycle((-1, 1))
>>> 50 + sum(x*next(cyc) for x in lis[0])   # lis[0] is [10,13,17]
36

这里的生成器表达式sum将返回如下内容:

>>> cyc = cycle((-1, 1))
>>> [x*next(cyc) for x in lis[0]]
[-10, 13, -17]

你也可以zip在这里使用:

>>> cyc = cycle((-1, 1))
>>> [x*y for x, y  in zip(lis[0], cyc)]
[-10, 13, -17]
于 2013-08-26T17:19:26.527 回答
2

此代码将打印每个单独的数字:

for myList in [[10,13,17],[3,5,1],[13,11,12]]:
    for item in myList:
        print(item)

或者对于您的特定用例:

((50 - List1[0][0]) + List1[0][1]) - List1[0][2]
于 2013-08-26T17:20:19.457 回答
2
List1 = [[10,-13,17],[3,5,1],[13,11,12]]

num = 50
for i in List1[0]:num -= i
print num
于 2013-08-26T17:16:05.590 回答
0
for l in list1:
    val = 50 - l[0] + l[1] - l[2]
    print "val:", val

遍历列表并根据需要对子列表进行操作。

于 2013-08-26T17:17:38.003 回答
0
50 - List1[0][0] + List[0][1] - List[0][2]

List[0]为您提供列表中的第一个列表(试用print List[0])。然后,您再次对其进行索引以获取该列表的项目。这样想:(List1[0])[0]

于 2013-08-26T17:15:09.930 回答
0
new_list = list(zip(*old_list)))

*old_list 将 old_list 解包到多个列表中,然后 zip 从每个列表中选择相应的第 n 个元素,然后将它们打包回来。

于 2021-06-16T19:58:04.023 回答