2个数据列表,第二个列表首先描述,在新列表中拆分第一个

时间:2016-05-01 14:32:21

标签: python list

列表B中的所有值都是1.0或2。 我正在尝试浏览listA(编码为“Time1”)并根据listB中的每个对应值(编码为Channel1)将每个术语排序为新列表。 又名:

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

感谢您的时间。

3 个答案:

答案 0 :(得分:1)

您可以使用enumeratelist comprehension

>>> 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 :(得分:0)

你可以在那里使用一个整数......

B = [1, 2, 1]

或者在检查之前转换为整数:

if Channel1[int(a)] == 1:

答案 2 :(得分:0)

有一些错误。

1 - 首先,您循环遍历A的元素而不是索引,并尝试将这些元素用作其他列表中的索引。

2 - 您将在任何一种情况下附加到相同的列表HistDetec1

3 - 您尝试增加已经执行该操作的索引

4 - 检查int值与浮点值的相等性

尝试类似的东西:

for index in range(len(Time1)):
    if Channel1[index] == 1.0:
         HistDetec1.append(Time1[index])
    elif Channel1[index] == 2.0:
         HistDetec2.append(Time1[index])