循环遍历Python中的列表

时间:2012-02-04 03:17:49

标签: python list

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

我在python中执行以下操作:

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

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

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

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

4 个答案:

答案 0 :(得分:175)

试试这个,

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]]
>>>

答案 1 :(得分:14)

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

代码仅为每个x值打印一个项目,而x正在迭代values的元素,这些是子列表。因此它只会打印一次子列表。

答案 2 :(得分:7)

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

public String equality(String a,String b,Options options) {
        System.out.println("----------------------------------------------------- "+a +"    "+b);
        Object var = "";
        try{
        var = options.fn(this);
        }catch(Exception e) {
            LOG.info(" Exception caught while comparing strings");
        }
        String returnStr = (String) var;
        return returnStr;
    }

请注意,尽管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) 是11(元素),len(list1)只能是10个元素,因为我们是从list1中索引为1的元素而不是list1中索引为0的元素开始for循环的< / p>

答案 3 :(得分:-1)

执行此操作:

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