列表B中的所有值都是1.0或2。我正在尝试遍历listA
(编码为"Time1"),并根据listB
(编码为Channel1)中的每个对应值将每个术语排序到一个新列表中。aka:
A = [2.3, 4.3, 3.1]
B = [1.0, 2.0, 1.0]
成为
P = [2.3, 3.1]
Q = [4.3]
我目前的代码是:
a = 0
for a in Time1:
if Channel1[a] == 1:
HistDetec1.append(Time1[a])
if Channel1[a] == 2:
HistDetec1.append(Time1[a])
a = a + 1
但这不起作用,因为它认为"a"是一个浮动
list indices must be integers, not float
谢谢你抽出时间。
您可以使用enumerate
和列表理解:
>>> A = [2.3, 4.3, 3.1]
>>> B = [1.0, 2.0, 1.0]
>>> P = [t for i, t in enumerate(A) if B[i] == 1.0]
>>> P
[2.3, 3.1]
>>> Q = [t for i, t in enumerate(A) if B[i] == 2.0]
>>> Q
[4.3]
或者,使用zip
:
>>> P = [a for a, b in zip(A, B) if b == 1.0]
>>> P
[2.3, 3.1]
>>> Q = [a for a, b in zip(A, B) if b == 2.0]
>>> Q
[4.3]
有一些错误。
1-首先,循环使用A的元素而不是索引,并尝试将这些元素用作其他列表的索引。
2-在任何一种情况下,您都将附加到同一列表HistDetec1
3-你试图增加索引,因为已经做了
4-检查int值与float值的相等性
试试这样的东西:
for index in range(len(Time1)):
if Channel1[index] == 1.0:
HistDetec1.append(Time1[index])
elif Channel1[index] == 2.0:
HistDetec2.append(Time1[index])
您可以在那里使用一个整数。。。
B = [1, 2, 1]
或在检查前转换为整数:
if Channel1[int(a)] == 1: