在python中查找2列表之间的区分条件

时间:2017-09-15 05:52:22

标签: python python-2.7 list

我是python中的新手,我试图弄明白,如何区分下面列出的2个列表

['11-10-2017', '12:15 PM', 'B.ARTS', 'Linguistics', '', '', 'German', 'Name']

并且

['', '', '', '', '', '', '', '']

问题是,两个列表都有''元素,并且我想要一个可靠的条件,如果列表中的项目是字符串而不是'',则需要满足该条件。列表也可能有7个'',只有一个项目是字符串。

4 个答案:

答案 0 :(得分:2)

您可以使用any将列表作为参数:

>>> any(['', '', '', '', '', '', '', ''])
False
>>> any(['', '', '', '', '', '', '', 'Test', ''])
True

如果有任何真正的元素(即非空),它将返回True

答案 1 :(得分:1)

您似乎想要从列表中过滤空字符串:

lst = ['11-10-2017', '12:15 PM', 'B.ARTS', 'Linguistics', '', '', 'German', 'Name']
[item for item in lst if item]
# ['11-10-2017', '12:15 PM', 'B.ARTS', 'Linguistics', 'German', 'Name']
  

我想要一个可靠的条件,如果列表中的项目是字符串而不是''

条件是if item。为了澄清,''是一个空字符串。在迭代期间,如果item'',则条件为False,因此该项目将从结果中排除。否则,条件为True,结果将添加到列表中。另请参阅this post

此行为是因为all objects in Python have "truthiness" - 假设所有对象都为True,但少数对象除外,例如False0"",{{1和空集合。

答案 2 :(得分:0)

  

如果没有'',我需要一个满足的条件   字符串。

您可以使用all进行检查。

In [1]: s1 = ['11-10-2017', '12:15 PM', 'B.ARTS', 'Linguistics', '', '', 'German', 'Name']
In [2]: s2 = ['11-10-2017', '12:15 PM']

In [4]: all(x for x in s1)
Out[4]: False

In [5]: all(x for x in s2)
Out[5]: True

答案 3 :(得分:0)

查看列表中是否有''的最简单方法是使用not in

tests = [
    ['11-10-2017', '12:15 PM', 'B.ARTS', 'Linguistics', '', '', 'German', 'Name'], 
    ['', '', '', '', '', '', '', ''], 
    ['a', 'b', 'c'],
    ['', '', '', '', '', 'x', '', '']]

for t in tests:
    print '' not in t, t

将显示:

False ['11-10-2017', '12:15 PM', 'B.ARTS', 'Linguistics', '', '', 'German', 'Name']
False ['', '', '', '', '', '', '', '']
True ['a', 'b', 'c']
False ['', '', '', '', '', 'x', '', '']