繁体   English   中英

如何迭代子列表的元素

[英]How iterate over elements of a sub list

希望你能帮我解决这个问题:

previous=[[0, 0, 1, 1], [0, 0, 0, 0], [0, 0, 1, 2], [0, 0, 1, 2], [0, 0, 1, 1], [0, 1, 1, 2], [0, 1, 1, 1], [0, 0, 1, 2], [0, 1, 1, 2], [0, 0, 0, 0]]

type(previous)
Out[67]: list

previous[0][-1]
Out[66]: 1

previous[1][-1]
Out[65]: 0

for p in previous:
    print(p)

[0, 0, 1, 1]
[0, 0, 0, 0]
[0, 0, 1, 2]
[0, 0, 1, 2]
[0, 0, 1, 1]
[0, 1, 1, 2]
[0, 1, 1, 1]
[0, 0, 1, 2]
[0, 1, 1, 2]
[0, 0, 0, 0]

我的问题,我需要从子列表中的每个元素和 append 中获取 3 值以创建另一个列表。

结果应该是:

[1,0,1,1,1,1,1,1,1,0]

我试过这个但没有成功:

mylist=[]
for p in previous:
    for x in p:
        mylist.append(p[x][-1])
        print(mylist)

和:

for p in previous:
    for x in p:
        print ([p[x]])

p是子列表,您无需使用for x in p:再次循环它以获取第三个元素(因此,如果x超出其界限,则在尝试索引子列表p时,您的代码实际上会引发IndexError ,并且尝试使用p[x][-1]来索引p[x]处的数字时会引发TypeError ),仍然p[-1]是最后一个元素(在你的情况下是第四个),你应该使用正索引:

p[2]  #  the third element

或者使用负索引来获取倒数第二个元素:

p[-2]

但是如果列表应该再增长,正索引会更好,因为它不会受到添加到列表末尾的元素的影响。

您还可以编写列表理解而不是for循环 + append

mylist = [p[2] for p in previous]

print(mylist)

Output:

[1, 0, 1, 1, 1, 1, 1, 1, 1, 0]

在您的循环中, p是子列表。 第一次通过循环p

[0, 0, 1, 1]

Python 执行基于零的索引(第一个元素始终位于索引 0)。 所以p[0]是第一个元素。 第三个元素是p[2]

如果使用负索引,-1 给出最后一个元素,-2 是倒数第二个或倒数第二个元素。

要修改您的解决方案以使其正常工作,您可以删除内部循环。 你不需要它。 您已经有了子列表。

mylist=[]
for p in previous:
    mylist.append(p[2])

print(mylist)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM