for i in range(len(data_list) - 1):
if(data_list[i] == 0):
continue;
timeline[int(int(data_list[i][1:]) / FIFTEEN_MINUTE_MS)] += 1;
k = i + 1;
while k < len(data_list) - 1:
if data_list[i][0] == data_list[k][0]:
print(data_list[i]);
print(data_list[k]);
tyre1 = int(data_list[i][1:]);
tyre2 = int(data_list[k][1:]);
#Error here
if((tyre2 - tyre1) < TWENTY_MPH and (tyre2 - tyre1) > SIXTY_MPH):
print(data_list);
if data_list[i][:1] == 'A':
if data_list[i + 1][:1] == 'A':
north += 1;
else:
south += 1;
data_list[i] = 0;
data_list[k] = 0;
break;
else:
k += 1;
else:
k += 1;
此代码运行正常,我得到一个输出。但是当我在if语句中交换tyre1和tyre2时就像这样
if(tyre2 - tyre1 < TWENTY_MPH and tyre2 - tyre1 > SIXTY_MPH):
我收到此错误。
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
data_analyse(data_list)
File "C:\Users\xxx\Desktop\data.py", line 19, in data_analyse
if data_list[i][:1] == data_list[k][:1]:
TypeError: 'int' object is not subscriptable
我没看到什么?
编辑:
有关data_list的信息
data_list = ['A268981', 'A269123', 'A604957', 'B604960', 'A605128', 'B605132', 'A1089807', 'B1089810', 'A1089948', 'B1089951']
为什么我在没有人告诉原因的情况下被投票?这对初学者来说不容易在这里提问。
编辑2:添加打印语句以检查整数
i: 0
k: 1
A268981
A269123
['A268981', 'A269123', 'A604957', 'B604960', 'A605128', 'B605132', 'A1089807', 'B1089810', 'A1089948', 'B1089951']
i: 2
k: 4
A604957
A605128
[0, 0, 'A604957', 'B604960', 'A605128', 'B605132', 'A1089807', 'B1089810', 'A1089948', 'B1089951']
常量值
TWENTY_MPH = 280
SIXTY_MPH = 100
答案 0 :(得分:0)
我认为你的算法应该重新考虑。
基本上你正在做的是
for i in [0..N]:
for k in [i..N]:
my_string_1 = data[i][0]
my_string_2 = data[k][0]
if my_string_1 == my_string_2:
data[i] = 0
data[k] = 0
这里的问题是,在某些时候,条件已经过验证,您将0
分配给data[k]
,但是在另一个i循环迭代中,对于相同的k
值重新读取这个值并将其视为某些'A268981'
字符串中的某些字符串失败。
示例:
i = 3
k = 7
data[k] = 0
然后再
i = 5
k = 7
data[k][0] <-- error
我没有运行你的代码,但我认为这可能会或可能不会发生,具体取决于其他条件if(tyre1 - tyre2 < TWENTY_MPH and tyre1 - tyre2 > SIXTY_MPH):
,这就是为什么你会看到它,具体取决于那个条件。
另外,我不知道那些常数是什么,但我看不出两个相同的值是多少&lt; 20和&gt;你也应该发布这些价值。
注意:在处理字符串时,data_list[i][0]
在我看来与data_list[i][:1]
相当且更具可读性。