【问题标题】:Looping over a list in Python [closed]在 Python 中循环列表
【发布时间】:2019-04-29 14:45:18
【问题描述】:

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

我在 python 中执行以下操作:

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

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

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

我需要在 Eclipse 中更改任何设置吗?

【问题讨论】:

  • 你能做到print values 并在此处显示输出吗? edit: 或者只是检查它是否为空。
  • 我不明白这里问的是什么以及大多数答案与它有何关系。这和 Eclipse 有什么关系?!

标签: python list


【解决方案1】:

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]

或者如果你需要更多的pythonic使用list-comprehensions

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

【讨论】:

  • 注意:“你的len(x)应该等于3”是指问题的早期版本,其中len(x) == 2是错误的。
【解决方案2】:

改为这样做:

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)

【讨论】:

    【解决方案3】:

    这是我正在寻找的解决方案。如果您想创建包含 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) 是 11 个(元素),len(list2) 将只有 10 个元素,因为我们从 list1 中索引为 1 的元素开始 for 循环,而不是从 list1 中索引为 0 的元素开始

    【讨论】:

    • 这正是我所需要的,因为我需要从索引 1 而不是 0 开始。+1
    • 这似乎与问题无关。
    【解决方案4】:

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

    代码只打印每个 x 的值 - 并且 x 正在迭代 values 的元素,它们是子列表。所以它只会打印每个子列表一次。

    【讨论】:

    • values[:] 切掉了 values 的所有元素,对吧?我假设您的意思是从切片创建的临时列表。只是想确定一下。
    • 感谢您提及不需要的副本。 @batbrat 它没有被切掉,它被切掉了,我的意思是这些值是重复的,并且仍然在 values 中。
    • 感谢您的澄清。
    猜你喜欢
    • 2016-02-25
    • 2016-08-02
    • 1970-01-01
    • 2021-02-24
    • 2020-05-29
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多