【问题标题】:Python - delete empty lists from a listPython - 从列表中删除空列表
【发布时间】:2017-11-02 23:38:20
【问题描述】:

我有一个列表,里面有几个空列表。我按照这里的指示 (Python: How to remove empty lists from a list?) 试图过滤掉空列表但失败了,我真的没有理由这样做。

我的清单:

data: [['#0721', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['GBE COD', '746', '$2.00', '', '$1,492.00'], ['GBW COD', '13,894', '$0.50', '', '$6,947.00'], ['GOM COD', '60', '$2.00', '', '$120.00'], ['GB WINTER FLOUNDER', '94,158', '$0.25', '', '$23,539.50'], ['GOM WINTER FLOUNDER', '3,030', '$0.50', '', '$1,515.00'], ['GBE HADDOCK', '18,479', '$0.02', '', '$369.58'], ['GOM HADDOCK', '0', '$0.02', '', '$0.00'], ['GBW HADDOCK', '110,470', '$0.02', '', '$2,209.40'], ['HAKE', '259', '$1.30', '', '$336.70'], ['PLAICE', '3,738', '$0.40', '', '$1,495.20'], ['POLLOCK', '3,265', '$0.02', '', '$65.30'], ['WITCH FLOUNDER', '1,134', '$1.30', '', '$1,474.20'], ['SNE YT', '1,458', '$0.65', '', '$947.70'], ['GB YT', '4,499', '$0.70', '', '$3,149.30'], ['REDFISH', '841', '$0.02', '', '$16.82'], ['', '', '', '', ''], ['', '', '', '', ''], ['54 DAS @ $8.00/DAY = 432.00', '', ''], ['', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', '']]

我的代码:

data = filter(None, data)
print("second data:", data)
data = list(data)
print("third data:", data)

产生:

second data: <filter object at 0x05F23CF0>
third data: [['#0721', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['GBE COD', '746', '$2.00', '', '$1,492.00'], ['GBW COD', '13,894', '$0.50', '', '$6,947.00'], ['GOM COD', '60', '$2.00', '', '$120.00'], ['GB WINTER FLOUNDER', '94,158', '$0.25', '', '$23,539.50'], ['GOM WINTER FLOUNDER', '3,030', '$0.50', '', '$1,515.00'], ['GBE HADDOCK', '18,479', '$0.02', '', '$369.58'], ['GOM HADDOCK', '0', '$0.02', '', '$0.00'], ['GBW HADDOCK', '110,470', '$0.02', '', '$2,209.40'], ['HAKE', '259', '$1.30', '', '$336.70'], ['PLAICE', '3,738', '$0.40', '', '$1,495.20'], ['POLLOCK', '3,265', '$0.02', '', '$65.30'], ['WITCH FLOUNDER', '1,134', '$1.30', '', '$1,474.20'], ['SNE YT', '1,458', '$0.65', '', '$947.70'], ['GB YT', '4,499', '$0.70', '', '$3,149.30'], ['REDFISH', '841', '$0.02', '', '$16.82'], ['', '', '', '', ''], ['', '', '', '', ''], ['54 DAS @ $8.00/DAY = 432.00', '', ''], ['', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', '']]

所以它最终什么也没做,这是为什么呢?

【问题讨论】:

  • 我在这里看不到任何空列表。一个包含 5 个空字符串的列表仍然有 5 个内容。
  • 您好。如果您想回答,请在下方添加 - 点击“回答您的问题”。我们不会在此处添加解决方案作为问题的编辑。

标签: python list numpy


【解决方案1】:

您可以使用any(a_list),如果a_list 的任何元素评估为True,则为True,就像非空字符串一样。

data = [['#0721', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['GBE COD', '746', '$2.00', '', '$1,492.00'], ['GBW COD', '13,894', '$0.50', '', '$6,947.00'], ['GOM COD', '60', '$2.00', '', '$120.00'], ['GB WINTER FLOUNDER', '94,158', '$0.25', '', '$23,539.50'], ['GOM WINTER FLOUNDER', '3,030', '$0.50', '', '$1,515.00'], ['GBE HADDOCK', '18,479', '$0.02', '', '$369.58'], ['GOM HADDOCK', '0', '$0.02', '', '$0.00'], ['GBW HADDOCK', '110,470', '$0.02', '', '$2,209.40'], ['HAKE', '259', '$1.30', '', '$336.70'], ['PLAICE', '3,738', '$0.40', '', '$1,495.20'], ['POLLOCK', '3,265', '$0.02', '', '$65.30'], ['WITCH FLOUNDER', '1,134', '$1.30', '', '$1,474.20'], ['SNE YT', '1,458', '$0.65', '', '$947.70'], ['GB YT', '4,499', '$0.70', '', '$3,149.30'], ['REDFISH', '841', '$0.02', '', '$16.82'], ['', '', '', '', ''], ['', '', '', '', ''], ['54 DAS @ $8.00/DAY = 432.00', '', ''], ['', '', '', '', '', '', '', '', ''], ['', '', '', '', '', '', '', '', '']]

non_empty = [sublist for sublist in data if any(sublist)]
print(non_empty)

[['#0721', '', '', '', ''],
 ['GBE COD', '746', '$2.00', '', '$1,492.00'],
 ['GBW COD', '13,894', '$0.50', '', '$6,947.00'],
 ['GOM COD', '60', '$2.00', '', '$120.00'],
 ['GB WINTER FLOUNDER', '94,158', '$0.25', '', '$23,539.50'],
 ['GOM WINTER FLOUNDER', '3,030', '$0.50', '', '$1,515.00'],
 ['GBE HADDOCK', '18,479', '$0.02', '', '$369.58'],
 ['GOM HADDOCK', '0', '$0.02', '', '$0.00'],
 ['GBW HADDOCK', '110,470', '$0.02', '', '$2,209.40'],
 ['HAKE', '259', '$1.30', '', '$336.70'],
 ['PLAICE', '3,738', '$0.40', '', '$1,495.20'],
 ['POLLOCK', '3,265', '$0.02', '', '$65.30'],
 ['WITCH FLOUNDER', '1,134', '$1.30', '', '$1,474.20'],
 ['SNE YT', '1,458', '$0.65', '', '$947.70'],
 ['GB YT', '4,499', '$0.70', '', '$3,149.30'],
 ['REDFISH', '841', '$0.02', '', '$16.82'],
 ['54 DAS @ $8.00/DAY = 432.00', '', '']]



【讨论】:

  • 这可能是一个愚蠢的问题,但在您的non_empty 行中,哪些是1 的(one)哪些是L 的?
  • @theprowler 我改了名字。
【解决方案2】:

正如 user2357112 指出你没有空列表,你有字符串 '' 的列表,它不是空列表。

要解决您的问题,您应该更改传递给过滤器的第一个参数。 filter(function, iterable) 将返回一个列表,其中包含函数返回 true 的可迭代值。

根据你的情况,试试:

def isEmpty(list):
    return any(list)

print filter(isEmpty, data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2011-06-18
    • 2022-11-01
    • 2011-01-17
    • 1970-01-01
    • 2017-03-05
    • 2014-01-06
    相关资源
    最近更新 更多