根据值过滤列表(Python)列表

时间:2014-07-20 03:04:33

标签: python list loops

嘿我正在尝试编写一个只打印列表列表中不包含零的列表的函数。以下是我正在使用的列表列表的示例:

[['10011.0', ' 65301.0', ' 0.085', ' 0.0', ' 0.0', ' 0.0', ' 0.03', ' 0.03', ' 0.075',
 ' 0.05', ' 0.065', ' 0.05', ' 0.05', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0'],
 ['10017.0', ' 2743.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.2', ' 0.413333', ' 0.415', ' 0.3125', ' 0.45', ' 0.46', ' 0.55'],
 ['10017.0', ' 9262.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.35', ' 0.69', ' 0.675', ' 0.8075', ' 0.8075', ' 0.5325', ' 0.785'], 
 ['10017.0', ' 29319.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0225', ' 0.06', ' 0.0575', ' 0.105', ' 0.1', ' 0.045', ' 0.0'],
 ['10017.0', ' 43562.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.0', ' 0.106667', ' 0.0925', ' 0.09', ' 0.1', ' 0.09', ' 0.1025'],
 ['10017.0', ' 43563.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 0.106667', ' 0.0925', ' 0.09', ' 0.1', ' 0.09', ' 0.1028']]

我正在运行的代码是:

def no_zero(A):
for i in range(len(A)):
    for j in range(2, (len(A[i])+1)):
        if '0.0' not in A[i]:
            print A[i]
            break

出于某种原因,它不会过滤任何列表并打印整个列表列表,尽管有条件:“如果'0.0'不在A [i]中:”我不确定我的错误在哪里,因为它看起来像是逻辑应该相当简单。谢谢你的帮助!

4 个答案:

答案 0 :(得分:2)

通常,当您想要过滤项目列表时,我们使用列表理解和过滤条件来获取新列表。所以,在你的情况下,它可以这样做

[c_list for c_list in list_of_lists if '0.0' not in c_list]

这将使所有列表中没有0.0。如果你想跳过前两个元素,那么从第三个元素开始,同时检查

[c_list for c_list in list_of_lists if '0.0' not in c_list[2:]]

答案 1 :(得分:1)

Noobie尝试。这是如果你想测试值是否为0。

其中l是列表中的列表。

for i in l:
    a=[]
    for j in i[2:]:
        if float(j)==0:
          break
    else:
        a.append(i)

答案 2 :(得分:1)

你正在努力实现这一目标。

  1. Python中通常不需要列表索引;改为使用迭代。
  2. 当您的数据有空格'0.0'
  3. 时,测试字符串的相等性为' 0.0'很麻烦
  4. List comprehensionsbuilt-ins是您的朋友。
  5. 因此:

     def no_zeros(rows):
        """Takes a list of rows, prints each row if and only if it has no zeros."""
        for row in rows:
            # skip first two elements of row, per specification
            tests = [float(x) != 0 for x in row[2:]]
            if all(tests):
                print row
    

    的产率:

    >>> no_zeros(A)
    ['10017.0', ' 43563.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 1.0', 
     ' 1.0', ' 1.0', ' 1.0', ' 1.0', ' 0.106667', ' 0.0925', ' 0.09', ' 0.1', 
     ' 0.09', ' 0.1028']
    

答案 3 :(得分:0)

如果A是您的列表列表,请过滤(全部,A)