基于值筛选列表列表(Python)中的列表

基于值筛选列表列表(Python)中的列表,python,list,loops,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

嘿,我想写一个函数,只打印一个列表,列表中不包含零。以下是我正在处理的列表示例:

[['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'不在[i]:”我不确定我的错误在哪里,因为逻辑似乎应该相当简单。谢谢你的帮助

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

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

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

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

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

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

。这是如果您想测试值是否为0

我就是你们的名单

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

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

我就是你们的名单

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

你让这件事变得更加困难

  • 在Python中,列表索引通常是不必要的;使用迭代代替
  • 当数据中有空格时,测试字符串是否与
    '0.0'
    相等很麻烦
    '0.0'
  • 他们是你的朋友
  • 因此:

    收益率:

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

    你让这件事变得更加困难

  • 在Python中,列表索引通常是不必要的;使用迭代代替
  • 当数据中有空格时,测试字符串是否与
    '0.0'
    相等很麻烦
    '0.0'
  • 他们是你的朋友
  • 因此:

    收益率:

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

    为什么有第二个
    for
    循环?你从不在任何地方使用
    j
    。我需要它跳过列表的前两个元素。很抱歉没有在最初的问题中澄清这一点。好吧,但您仍然从未在代码中的任何地方使用
    j
    。您也不想使用
    len+1
    作为终止点,因为
    A[len(A)]
    从来都不存在。为什么要使用第二个
    for
    循环?你从不在任何地方使用
    j
    。我需要它跳过列表的前两个元素。很抱歉没有在最初的问题中澄清这一点。好吧,但您仍然从未在代码中的任何地方使用
    j
    。您也不想使用
    len+1
    作为终止点,因为
    A[len(A)]
    从不存在。它应该是
    [2:
    ,而不是
    [3:
    。列表是零索引的。@TheSoundDefense Thank:)修复了它。除了列表中的零是
    “0.0”
    ,我不指望这个特殊的间距`最好使用浮子;IEEE-754中至少保证0.0的精确表示。它应该是
    [2://code>,而不是
    [3://code>。列表是零索引的。@TheSoundDefense Thank:)修复了它。除了列表中的零是
    “0.0”
    ,我不指望这个特殊的间距`最好使用浮子;IEEE-754中至少保证0.0的精确表示。您测试过吗
    A
    A-s iterable是一个长度为6的列表(每个列表本身都是一个列表。非空列表是“trueish”,因此
    A
    中的每个列表对于
    all
    都是真的,因此将返回所有6个列表的列表。您测试了吗?
    A
    A-s iterable是长度为6的列表(每个列表本身都是一个列表。非空列表是“真实的”,因此
    a
    中的每个列表对于
    all
    都是真实的,因此所有6个列表的列表都将被返回。+1对于noob来说非常好。你甚至把
    for/break/else
    的事情做对了。你错过了i[2:]中j的
    ):
    事情,但那是隐藏在评论中的,而不是在OP问题中。不,一开始我自己也错过了“跳过前两个元素”。善待自己;)+1对于noob来说相当不错。你甚至把/break/else的
    事情做对了。你错过了I[2:]中j的
    事情,但那是隐藏在评论中的,而不是在OP问题中。不,一开始我自己也错过了“跳过前两个元素”。善待自己;)