【问题标题】:deleting empty values from list inside list从列表中的列表中删除空值
【发布时间】:2016-02-17 07:43:01
【问题描述】:

我需要有关如何从列表中的列表中删除 null、空字符串的帮助。

res = [ ['', 'ACTION', 'ADVENTURE', 'FANTASY', ''],
 ['', 'ACTION', 'DRAMA', 'ROMANCE', ''],
 ['', 'HISTORY', 'ROMANCE', 'WAR', ''],
 ['', 'DRAMA', 'THRILLER', ''],
 ['', 'DRAMA', 'THRILLER', ''],
 ['', 'COMEDY', 'DRAMA', 'ROMANCE', ''],
 ['', 'ADVENTURE', 'COMEDY', ''],
 ['', 'ACTION', 'THRILLER', '']]

如果是这样的话

res = ['', 'ACTION', 'ADVENTURE', 'FANTASY', '']

我愿意

res = [x for x in res if x ]

但是如何从列表中的列表中删除。 请建议。

而且我还需要从该列表中找到每个项目的计数,例如。 ACTION 的数量,THRILLER 的数量。

【问题讨论】:

  • 从每个子列表中删除第一个和最后一个元素
  • @Tushar 这依赖于他们将始终处于这种结构中的假设,但事实可能并非如此。
  • 如果您可以发布单独的问题而不是将您的问题合并为一个问题,则最好。这样,它可以帮助人们回答您的问题,也可以帮助其他人至少寻找您的一个问题。谢谢!

标签: python regex list


【解决方案1】:

试试这个

res1 = [[i for i in j if i] for j in res]
dictt = {}
[[dictt.__setitem__(i, dictt.setdefault(i, 0) + 1) for i in j] for j in res1]

【讨论】:

  • @martineau 通过这个我得到了 res 列表(主列表或父列表)中的项目计数,即 8。但我想找到 Action 的计数,然后像明智的那样计算喜剧的计数。
  • 不,相反,我没有得到任何值来代替每个项目。
  • 你会在 dictt 中得到计数。它在我身边运行良好。
  • @ user2393267 谢谢明白了。但是在执行时为什么有些行会显示那些没有价值的列表。你能解释一下吗?
【解决方案2】:

映射和过滤资源列表:

map(lambda x:filter(lambda y: y != "", x), res)


>>> map(lambda x:filter(lambda y: y != "", x), res)
[['ACTION', 'ADVENTURE', 'FANTASY'], ['ACTION', 'DRAMA', 'ROMANCE'], ['HISTORY', 'ROMANCE', 'WAR'], ['DRAMA', 'THRILLER'], ['DRAMA', 'THRILLER'], ['COMEDY', 'DRAMA', 'ROMANCE'], ['ADVENTURE', 'COMEDY'], ['ACTION', 'THRILLER']]

计数:

import collections
c = Counter(reduce(lambda x, y: x+y, filtered_res))

>>> filtered_res= map(lambda x:filter(lambda y: y != "", x), res)
>>> c = Counter(reduce(lambda x, y: x+y, filtered_res))
>>> c["DRAMA"]
4

【讨论】:

  • 所以请告诉如何计算每个项目的数量。
  • 我真的很喜欢使用 reduce 。我现在也可以使用 Counter 了,很高兴知道。
  • @AkshayHazari,例如,map、reduce 和所有内置函数与循环相比非常快,始终是使用它们的好习惯。函数式编程也很有趣:D
  • 是的。在启动 python 并找到 map、reduce (foldr)、filter 之前做了一些 Haskell 编码,不使用它们是不可能的。
  • 是的,haskeller 也在这里,一旦你弹出就没有停止
【解决方案3】:

使用 'old-fashioned` for 循环,您可以删除空条目并按类别获取总数:

res = [ ['', 'ACTION', 'ADVENTURE', 'FANTASY', ''],
 ['', 'ACTION', 'DRAMA', 'ROMANCE', ''],
 ['', 'HISTORY', 'ROMANCE', 'WAR', ''],
 ['', 'DRAMA', 'THRILLER', ''],
 ['', 'DRAMA', 'THRILLER', ''],
 ['', 'COMEDY', 'DRAMA', 'ROMANCE', ''],
 ['', 'ADVENTURE', 'COMEDY', ''],
 ['', 'ACTION', 'THRILLER', '']]

counts = {}
cleaned = []
for categories in res:        
    cleaned.append([]);
    for category in categories:        
        if category !='':           
            cleaned[-1].append(category) 
            if category in counts:
                counts[category]= counts[category] +1
            else:
                counts[category]=1;            

print counts['ACTION']

【讨论】:

  • 谢谢,但是如果使用您的代码,我可以得到我喜欢的商品的数量,例如 count(ACTION) = ?.
猜你喜欢
  • 2014-01-06
  • 2017-11-02
  • 2022-11-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2015-09-20
  • 1970-01-01
相关资源
最近更新 更多