我有state_array
功能。如果if
状态为真,我将从列表result
中删除项目。它不起作用,因为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
答案 0 :(得分:1)
这里你有太多的逻辑,以便做一个干净的列表理解。我并不是说不可能将它全部包含在列表理解中,我说它会非常难看。要防止超出范围错误,只需用枚举(结果)替换范围(len(result))。
def state_array(self):
for k, r in enumerate(result):
if k+7 >= len(result):
break
if '[0]' in str(r):
if '[7]' in str(result[k+7]) and '[8]' not in str(result[k+8]):
r[0] = str(r[0]).replace('[0]', '').replace('X0', 'X0,8') # state array
del result[k+1:k+7]
else:
continue
答案 1 :(得分:1)
从0循环到数组的原始长度,但随后更改循环内的实际长度。对此的快速修复是使用while循环:
FIRDatabaseReference *reference = YOUR_REF;
NSDictionary *values = [NSDictionary dictionaryWithObjectsAndKeys:
self.textField.text,SOME_NAME"KEY", nil];
[reference updateChildValues:values withCompletionBlock:^(NSError *__nullable err, FIRDatabaseReference * ref){
if(err) {
NSLog(@"Error save");
return;
}
NSLog(@"Saved seccessfully in FireBace db");
}];