Python 正确的环路范围是多少
我想从列表中删除一些数组。但我用错了射程。 开始时,范围正确。 如果变量result[b][2:3]中有字符串,则删除结果[b]Python 正确的环路范围是多少,python,for-loop,Python,For Loop,我想从列表中删除一些数组。但我用错了射程。 开始时,范围正确。 如果变量result[b][2:3]中有字符串,则删除结果[b] for b in range(len(result)): if 'FillLevel' in result[b][2:3]: del result[b] 在此之后,出现错误:indexer:list索引超出范围 我要查找此字符串并删除整行(数组): 为什么要使用此代码: print(result[4][2:3]) print(result
for b in range(len(result)):
if 'FillLevel' in result[b][2:3]:
del result[b]
在此之后,出现错误:indexer:list索引超出范围
我要查找此字符串并删除整行(数组):
为什么要使用此代码:
print(result[4][2:3])
print(result[5][2:3])
print(result[6][2:3])
print(result[7][2:3])
print(result[8][2:3])
print(result[9][2:3])
print(result[10][2:3])
b = 0
while b < len(result):
if 'FillLevel' in result[b][2:3]:
del result[b]
del adress[b]
print('yes')
b += 1
问题是
del result[b]
会更改result
的组成(和长度),从而干扰循环
也许最简单的解决方法是将代码重新表述为列表:
result = [r for r in result if 'FillLevel' not in r[2:3]]
或者,您可以通过反向迭代来修复它:
for b in range(len(result) - 1, -1, -1):
if 'FillLevel' in result[b][2:3]:
del result[b]
问题是
del result[b]
会更改result
的组成(和长度),从而干扰循环
也许最简单的解决方法是将代码重新表述为列表:
result = [r for r in result if 'FillLevel' not in r[2:3]]
或者,您可以通过反向迭代来修复它:
for b in range(len(result) - 1, -1, -1):
if 'FillLevel' in result[b][2:3]:
del result[b]
假设列表中有10项 中途删除其中一项;现在列表中有9项 在上一个循环中,循环要求输入第十项。我猜这就是发生索引错误的地方(尽管也可能是由于
[2:3]
调用引起的,具体取决于列表的内容)
一个更具python风格的解决方案是
result = [val for val in result if 'FillLevel' not in val[2:3]]
假设列表中有10项 中途删除其中一项;现在列表中有9项 在上一个循环中,循环要求输入第十项。我猜这就是发生索引错误的地方(尽管也可能是由于
[2:3]
调用引起的,具体取决于列表的内容)
一个更具python风格的解决方案是
result = [val for val in result if 'FillLevel' not in val[2:3]]
如果要保留相同的列表并按顺序解析,可以使用while循环,在每次迭代中计算
len(result)
b = 0
while b < len(result) :
if 'FillLevel' in result[b][2:3]:
del result[b]
b += 1
b=0
而b
如果要保留相同的列表并按顺序解析,可以使用while循环,在每次迭代中计算len(result)
b = 0
while b < len(result) :
if 'FillLevel' in result[b][2:3]:
del result[b]
b += 1
b=0
而b
第一个
-在不获取长度的情况下按列表进行迭代是很容易的,可能是因为在循环过程中列表的长度发生了变化,所以您得到了一个错误
第二
-您正在尝试检查字符串切片中的“FillLevel”。切片返回一个字符
-尽量不要混音你的列表,而是用过滤过的项目制作一个新的列表
像这样:
new_list = []
for b in result:
if 'FillLevel' not in b:
new_list.append(b)
或检查并键入以下内容:
[i for i in result if 'FillLevel' not in i]
首先
-在不获取长度的情况下按列表进行迭代是很容易的,可能是因为在循环过程中列表的长度发生了变化,所以您得到了一个错误
第二
-您正在尝试检查字符串切片中的“FillLevel”。切片返回一个字符
-尽量不要混音你的列表,而是用过滤过的项目制作一个新的列表
像这样:
new_list = []
for b in result:
if 'FillLevel' not in b:
new_list.append(b)
或检查并键入以下内容:
[i for i in result if 'FillLevel' not in i]
“变量结果[b][2:3]中的if字符串”是什么意思?我不确定这是否有意义。请参阅以了解如何从列表中删除项目。@MatthewCliatt这确实有意义,但很可能与'FillLevel'==result[b][2]@MatthewCliatt没有任何区别。我想这意味着,
result[b]
是一个字符串数组,所以result[b][2:3]
将是一个string@AustinHastings如果您认为这个问题以前已经被问过并回答过,那么请将其标记为重复。您所说的“变量结果[b][2:3]中的If字符串”是什么意思?我不确定这是否有意义。请参阅以了解如何从列表中删除项目。@MatthewCliatt这确实有意义,但很可能与'FillLevel'==result[b][2]@MatthewCliatt没有任何区别。我想这意味着,result[b]
是一个字符串数组,所以result[b][2:3]
将是一个string@AustinHastings如果您认为这个问题以前已经被问过并回答过,那么请将其标记为重复。我正在尝试使用您的第一个解决方案。但是如果我有FillLevel[5],FillLevel[7]
等等,这就不起作用了。我尝试使用if'FillLevel['not in b
-但这也不起作用。可能您的切片没有用处,我可能会对您的“result”内容产生错误。尝试将其添加到此处:if'FillLevel'not in b[2]:我尝试使用您的第一个解决方案。但如果我有FillLevel[5],FillLevel[7],这也不起作用
。等。我尝试使用if'FillLevel['不在b中
-但这也不起作用。可能您的切片没有用处,我可能会对您的'result'内容产生错误。尝试将其添加到此处:if'FillLevel'不在b[2]中: