我正在运行这段代码,由于某种原因,当数组中有2个元素应按“ if not inc”语句时,它只会弹出1个元素。
我已经使用打印进行调试,并且似乎在“ if not inc” == true之后循环第一次中断,我不希望这种情况发生。它应该继续循环并再次回到那里。
尝试通过并仍然没有希望的结果
def readFile():
with open('incidents.txt') as f:
x = f.read().splitlines()
print(x)
i = 0
for inc in x:
print(i)
if not inc:
x.pop(i)
print("if command")
pass
i = i + 1
print(x)
y = x
return y
Original Array -
['INC123123123', 'INC222222222', 'INC333333333', 'INC444444444', 'INC555555555', '', '']
Expected result is -
['INC123123123', 'INC222222222', 'INC333333333', 'INC444444444', 'INC555555555']
Actual Result is -
['INC123123123', 'INC222222222', 'INC333333333', 'INC444444444', 'INC555555555', '']
答案 0 :(得分:2)
在Python中,使用i
这样的计数器变量并进行i + 1
并不是一个好习惯。阅读Ned Batchelder的Loop Like A Native。每当您编写Python(尤其是循环)时,请查看是否有 idiomatic 方法来实现。这就是Python之类的语言的真正魅力。另外,避免在循环时修改列表的大小。
如果您需要删除空字符串,只需使用filter(None, x)
。
xStr = ['INC123123123', 'INC222222222', 'INC333333333',
'INC444444444', 'INC555555555', '', '']
print(list(filter(None, xStr)))
filter
的签名是(function_to_apply, list_of_inputs)
。因此,如果您使用
lambda x: x != ''
然后它将仅选择非空字符串。与使用None
相比,这是一种更为冗长的方法。如果要反转,请使用
lambda x: x == ''`
因此,如果您使用list(filter(lambda x: x == '', xStr))
,它将仅选择空字符串。
答案 1 :(得分:1)
使用列表推导的单行代码:
xStr = ['INC123123123', 'INC222222222', 'INC333333333', 'INC444444444',
'INC555555555', '', '']
print([x for x in xStr if x])
输出:
['INC123123123', 'INC222222222', 'INC333333333', 'INC444444444', 'INC555555555']
答案 2 :(得分:1)
使用过滤器删除要删除的特定类型的字符串。您可以结合使用lambda和filter来添加条件,以删除任何特定类型的字符串。
line = ['INC123123123', 'INC222222222', 'INC333333333',
'INC444444444', 'INC555555555', '', '']
line_mod = filter(lambda x: x != '', line)
print line_mode
输出:
['INC123123123', 'INC222222222', 'INC333333333', 'INC444444444', 'INC555555555']
答案 3 :(得分:1)
在迭代时从列表中删除元素不是一个好主意。
尝试:
def readFile():
with open('incidents.txt') as f:
result = []
for line in f:
line = line.strip()
if line:
result.append(line)
return result
答案 4 :(得分:0)
这个怎么样?它过滤掉所有长度为0的字符串
def foo():
x = ['INC123123123', 'INC222222222', 'INC333333333', 'INC444444444', 'INC555555555', '', '']
x = list(filter(len, x))
y = x
return y
print(foo())
答案 5 :(得分:0)
您正在遍历列表时尝试对其进行修改。相反,您应该执行以下操作:
def readFile():
with open('incidents.txt') as f:
x = f.read().splitlines()
print(x)
y = [a for a in x if a]
return y
答案 6 :(得分:0)
也许您应该改用if inc == ''
。
答案 7 :(得分:0)
您将使用过滤器功能删除空白字符串。
def readFile():
with open('try.txt') as f:
x = f.read().splitlines()
print(x)
i = 0
y = list(filter(None, x))
return y