我有一个包含子列表的列表,我想打印所有长度等于3的子列表。
我在 python 中做了以下工作:
for x in values[:]: if len(x) == 3: print(x)
values是原始列表。以上代码是否打印每个 x值的长度等于3的子列表?我想显示子列表,其中 length == 3只有一次。
values
x
length == 3
问题解决了。问题在于 Eclipse 编辑器。我不明白为什么,但是当我运行我的循环时,它只显示了列表的一半。
在 Eclipse 中是否有必须更改的设置?
您也可以使用 for x in values而不是 for x in values[:]; 后者会产生不必要的副本。当然,代码检查的长度是2而不是3..。
for x in values
for x in values[:]
代码每个 x值只打印一个条目-而 x正在迭代 values的元素,这些元素是子列表。因此它只打印每个子列表一次。
x in mylist比 x in mylist[:]更好,更易读,你的 len(x)应该等于 3。
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]
或者如果你需要更多的蟒蛇使用 列表理解法
>>> [x for x in mylist if len(x)==3] [[1, 2, 3], [8, 9, 10]] >>>
这就是我一直在寻找的解决方案。如果您希望创建包含列表1中的数字元素差异的列表2。
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开始
len(list1)
len(list2)
不如这样做:
values = [[1,2,3],[4,5]] for x in values: if len(x) == 3: print(x)