我是python中的新手,我试图弄明白,如何区分下面列出的2个列表
['11-10-2017', '12:15 PM', 'B.ARTS', 'Linguistics', '', '', 'German', 'Name']
并且
['', '', '', '', '', '', '', '']
问题是,两个列表都有''
元素,并且我想要一个可靠的条件,如果列表中的项目是字符串而不是''
,则需要满足该条件。列表也可能有7个''
,只有一个项目是字符串。
答案 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
,但少数对象除外,例如False
,0
,""
,{{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', '', '']