如何在Python中检查列表中的元素是否为空?

8

我有一个列表,类似于:

l = []

如何检查 l[i] 是否为空?
l[i] = ''

并且

l[i] = ""

无法工作。


1
一个空列表是没有元素的列表(len(l) == 0)。考虑到这一点,以下情况都是成立的:l = [""]; l[0] == ""l = [None]; l[0] is None。那么,目标/意图是什么呢? :) - user166390
这有点含糊不清。你所说的“空”是指索引存在,但为空字符串吗?还是根本不存在,例如元素数量少于你的索引? - Codie CodeMonkey
你尝试过使用等于比较运算符吗?例如:l[0] == "" - rossipedia
5
你不能只说“X没起作用”。你做了什么具体的比较?你收到了什么错误信息? - machine yearning
我知道元素l[i]存在,但是如何检查字符串是否为空?(我也测试了l[i] == "",但它不起作用。) - user1081715
@bdhar,这就是我现在所做的方式。谢谢! - user1081715
8个回答

11

尝试:

if l[i]:
    print 'Found element!'
else:
    print 'Empty element.'

4
这就是方法。 - Mike Lyons
它的零是多少? - Robin Winslow

4

只需检查该元素是否等于None类型,或使用NOT运算符,该运算符相当于您在其他语言中观察到的NULL类型。

if not A[i]:
    ## do whatever

无论如何,如果您知道列表的大小,则无需执行所有这些操作。

3
假设:
letter= ['a','','b','c']

for i in range(len(letter)):
    if letter[i] =='':
        print(str(i) + ' is empty')

输出-1为空

因此我们可以看到索引1为空。


2

如果你想知道索引为i的列表元素是否已设置,你可以简单地检查以下内容:

if len(l)<=i:
    print ("empty")

如果你想了解其他语言中的空指针或空引用等概念,Python提供了None。你可以这样写:
l[0] = None # here, list element at index 0 has to be set already
l.append(None) # here the list can be empty before
# checking
if l[i] == None:
    print ("list has actually an element at position i, which is None")

0

我遇到了一个类似的问题,需要对位置字符串进行一些预测试:

loc_string = "site/building/room//ru" # missing rack
is_ok = True
for i in loc_string.split('/'):
  if not i:
    is_ok = False

if is_ok:
  #perform any action
  print(is_ok)

如果所有值都有数据,这将返回True。


0

与某些语言不同,empty在Python中不是关键字。Python列表是从头开始构建的,因此如果元素i具有值,则对于所有i > 0,元素i-1也具有值。

要进行相等性检查,通常使用==比较运算符。

>>> my_list = ["asdf", 0, 42, '', None, True, "LOLOL"]
>>> my_list[0] == "asdf"
True
>>> my_list[4] is None
True
>>> my_list[2] == "the universe"
False
>>> my_list[3]
""
>>> my_list[3] == ""
True

这里是strip 方法的链接:你的评论让我想到你可能遇到了一些奇怪的文件解析错误,所以确保在期望空行之前去掉换行符和不必要的空格。

1
除了你答案中的一些语法错误(已修正),教人们使用is关键字进行相等性测试是个不好的主意。它仅用于对象身份测试(除此之外,你可能会遇到一些混乱)。详情请参阅:https://dev59.com/s13Ua4cB1Zd3GeqP_VBG。 - Tim Pietzcker
我的错,由于某种原因,我误以为None的比较使用is。也许这是我从PHP中记住的什么东西... - machine yearning
4
是的,因为只有一个None对象,所以你需要使用is运算符来显式地测试对象的身份。 - Tim Pietzcker
如果我声明l.append(None),那么l[i]是None会起作用,但是如果我从文件中读取并使用l.append(linecache.getline(datei, number))创建一个新项,则无法通过使用“is None”来证明它是否为空。 - user1081715
那么你想要的是 my_list[3] == '' 的最后一种情况。提示:你是否使用了 mystring.strip() 来去除换行符和其他空格? - machine yearning

0
我使用len()和一个简单的if/else语句解决了这个问题。
当用len()包装列表元素时,它们将返回一个整数(1表示存在,0表示不存在)。
l = []

print(len(l)) # Prints 0

if len(l) == 0:
    print("Element is empty")
else:
    print("Element is NOT empty")

Output:

Element is empty    

如果l为空: 输出“empty” 否则: 输出“contains data” - Riccardo B.

0
List = []

for item in List:
    if len(item.rstrip()) != 0:
        # Do whatever you want

如果您有一长串带有空格的字符串列表,并且您不考虑这些列表值,那么这将非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接