Python 如何用理解替换for循环

Python 如何用理解替换for循环,python,python-3.x,loops,for-loop,list-comprehension,Python,Python 3.x,Loops,For Loop,List Comprehension,我有状态数组功能。如果If状态为true,我将从列表结果中删除项。它不起作用,因为for loop超出范围。 我想解决这个问题,我想问,有没有可能让列表理解而不是“for loop”,如果有,怎么做 def state_array(self): for k in range(len(result)): if '[0]' in str(result[k]): if '[7]' in str(result[k+7]) and '[8]' not in

我有
状态数组
功能。如果
If
状态为true,我将从列表
结果中删除项。它不起作用,因为
for loop
超出范围。 我想解决这个问题,我想问,有没有可能让列表理解而不是“for loop”,如果有,怎么做

def state_array(self):
    for k in range(len(result)):
        if '[0]' in str(result[k]):
            if '[7]' in str(result[k+7]) and '[8]' not in str(result[k+8]):
                result[k][0] = str(result[k][0]).replace('[0]', '').replace('X0', 'X0,8')                      # state array
                del result[k+1:k+7]
            else:
                continue
我的意见:

V;3;M_BB01_03[0];SPPP.BK1800.58,X0;RW
V;3;M_BB01_03[1];SPPP.BK1800.58,X1;RW
V;3;M_BB01_03[2];SPPP.BK1800.58,X2;RW
V;3;M_BB01_03[3];SPPP.BK1800.58,X3;RW
V;3;M_BB01_03[4];SPPP.BK1800.58,X4;RW
V;3;M_BB01_03[5];SPPP.BK1800.58,X5;RW
V;3;M_BB01_03[6];SPPP.BK1800.58,X6;RW
V;3;M_BB01_03[7];SPPP.BK1800.58,X7;RW
和预期产出:

V;3;M_BB01_03[0];SPPP.BK1800.58,X0,8;RW

在这里,为了完成一个干净的列表理解,您在这个块中有太多的逻辑。我并不是说不可能把所有的东西都放在一个列表中,我说这会非常难看。为了防止超出范围的错误,只需将范围(len(result))替换为枚举(result)


在这里,为了完成一个干净的列表理解,您在这个块中有太多的逻辑。我并不是说不可能把所有的东西都放在一个列表中,我说这会非常难看。为了防止超出范围的错误,只需将范围(len(result))替换为枚举(result)

您可以从0循环到数组的原始长度,然后更改循环中的实际长度。对此的快速修复方法是使用while循环:

k=0
while(k<len(A)):
    if(condition)
         del(A[k])
    k=k+1
k=0
while(k从0循环到数组的原始长度,然后更改循环中的实际长度。对此的快速修复方法是使用while循环:

k=0
while(k<len(A)):
    if(condition)
         del(A[k])
    k=k+1
k=0

虽然(你能给出一些输入和期望的输出吗?如果你给出一个完全可以独立运行的代码段,人们会更容易帮助你复制输入和输出的I更新问题。你的输入是字符串列表吗?当你的输入字符串只有8个元素时,为什么要检查第9个元素?你能给出一些输入和期望的结果吗输出?如果你给出一个可以完全独立运行的代码片段,人们可以更容易地帮助你复制输入上的“我更新的问题”,并输出一个字符串列表。当你的输入字符串只有8个元素时,为什么要检查第9个元素?它会解决它,因为它不是在固定大小的范围内迭代在循环之前,您正在迭代实际的项。我唯一忘记的是检查k+7是否低于结果的长度。因此,如果使用
enumerate
生成迭代器,如果iterable的大小发生变化,您就不会得到索引器!我不知道-谢谢。它不起作用,我有一个错误:
if int(k+7)>=len(result):TypeError:只能将list(而不是“int”)连接到list
my bad,枚举(result)中是k,r它确实解决了这个问题,因为您不是在循环之前创建的固定大小的范围内进行迭代,而是在实际项目上进行迭代。我唯一忘记的是检查k+7是否低于结果的长度。因此,如果您使用产生迭代器的
enumerate
,如果iterable的大小发生变化,您就不会得到索引器!我不知道-谢谢。它不工作,我有一个错误:
if int(k+7)>=len(result):TypeError:只能将list(而不是“int”)连接到list
my bad,它是枚举(result)中的k,r