在Python中循环遍历列表


177

我有一个带有子列表的列表。我想打印长度等于3的所有子列表。

我在python中执行以下操作:

for x in values[:]:
    if len(x) == 3:
        print(x)

values是原始列表。上面的代码是否打印每个值等于3的子列表x?我只想显示length == 3一次子列表。

问题已经解决了。问题出在Eclipse编辑器上。我不明白原因,但是在运行循环时,它仅显示列表的一半。

我必须在Eclipse中更改任何设置吗?


1
您可以print values在此处显示输出吗? 编辑:或只是检查它是否不为空。
Brigand

Answers:


196

试试这个,

x in mylistx in mylist[:]len(x)应该等于更好,更易读3

>>> mylist = [[1,2,3],[4,5,6,7],[8,9,10]]
>>> for x in mylist:
...      if len(x)==3:
...        print x
...
[1, 2, 3]
[8, 9, 10]

或者,如果您需要更多的Python语言,请使用list-comprehensions

>>> [x for x in mylist if len(x)==3]
[[1, 2, 3], [8, 9, 10]]
>>>

15

您最好使用for x in values而不是for x in values[:]; 后者制作了不必要的副本。另外,当然,该代码检查的长度为2而不是3 ...

该代码仅针对x-的值打印一项,并x在的元素(values即子列表)上进行迭代。因此,它将只打印每个子列表一次。


4
values [:]会切出值的所有元素,对不对?我假设您的意思是从切片创建的临时列表。只是想确定一下。
batbrat '02

1
感谢您提及不需要的副本。@batbrat不会切出,而是切出,我的意思是值是重复的,仍然在values
AsTeR

感谢您的澄清。
batbrat

14

这是我一直在寻找的解决方案。如果要创建包含List1中数字元素之差的List2。

list1 = [12, 15, 22, 54, 21, 68, 9, 73, 81, 34, 45]
list2 = []
for i in range(1, len(list1)):
  change = list1[i] - list1[i-1]
  list2.append(change)

请注意,虽然len(list1)is是11(元素),但len(list2)将仅是10个元素,因为我们是从list1中索引为1的元素而不是list1中索引为0的元素开始for循环的


这正是我需要的,因为我需要从索引1而不是0开始。+1
timv

1

而是这样做:

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.