如何打印特定长度的子列表?

184 投票
4 回答
829107 浏览
提问于 2025-04-17 12:18

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

我在用Python做以下操作:

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

values是原始列表。上面的代码是否会为每个x的值打印出所有长度为3的子列表?我只想显示长度为3的子列表一次。

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

在Eclipse中我需要更改什么设置吗?

4 个回答

15

这是我一直在寻找的解决方案。如果你想创建一个名为 List2 的列表,里面包含 List1 中数字元素的差值。

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(表示有 11 个元素),但是 len(list2) 只有 10 个元素,因为我们在 List1 中的循环是从索引为 1 的元素开始,而不是从索引为 0 的元素开始。

16

你可以直接用 for x in values,而不是 for x in values[:];后者会多做一个不必要的拷贝。而且,这段代码实际上是检查长度为2,而不是3……

这段代码每次只打印一个 x 的值,而 x 是在遍历 values 里的元素,也就是那些子列表。所以它只会每个子列表打印一次。

206

x in mylist 这个写法比 x 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风格,可以使用列表推导式

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

撰写回答