根据另一个列表的标准制作列表

时间:2018-03-01 15:07:00

标签: python list for-loop if-statement

我有一个名为' label'的空列表,其中根据哪个存储桶更合适,它会填充标签'列表0,1或2.

'标签'与3'桶相关联:

# Bucket 0: 0 -7 Days --------------------------> 0
# Bucket 1: 1 - 6 Weeks (8 - 42 Days) ----------> 1
# Bucket 2: 7+ Weeks (49+ Days) ----------------> 2

我有另一个列表的长度为23411.此列表的内容包括0天到1099天。因此,根据此列表的内容,它应填充“#”标签'名单。

我试过这个for-loop& if-else声明要做我想要的事情,但它给了我一个IndexError: list assignment index out of range

label = []
for i in range(23411):
    if ageNew[i] <= 7:
        label[i] = 0
    elif ageNew[i] <= 42:
        label[i] = 1
    else:
        label[i] = 2

例如:

list: [0, 8, 14, 14, 45, 1056, 1]
label: [0, 1, 1, 1, 2, 2, 0]

5 个答案:

答案 0 :(得分:1)

您无法进行作业label[i] = something,因为它不存在。 请改用.append()

label = []
for i in range(23411):
    if ageNew[i] <= 7:
        res = 0
    elif ageNew[i] <= 42:
        res = 1
    else:
        res = 2
    label.append(res)

答案 1 :(得分:1)

您的列表为空,因此[i]将无法按预期方式运行,因为该索引不存在。怎么样:

label = []
for i in range(23411):
    val = None
    if ageNew[i] <= 7:
        val = 0
    elif ageNew[i] <= 42:
        val = 1
    else:
        val = 2
    label.append(val)

这应该有用。

答案 2 :(得分:0)

试试这个:

label = []
for i in lists:
    if i <= 7:
        label.append(0)
    elif i >= 8 and i <= 42:
        label.append(1)
    else:
        label.append(2)
#output
[0, 1, 1, 1, 2, 2, 2, 0]

标签

答案 3 :(得分:0)

以防您真正想要numpy

import numpy as np
x=np.array((12,32,54,1,2,43,4))
res=np.zeros(x.shape)
res[x<=3] = 0
res[np.logical_and(x>3,x<=10)] = 1
res[x>10] = 2
print(res)
array([ 2.,  2.,  2.,  0.,  0.,  2.,  1.])

您可以使用以下命令将列表转换为numpy数组:

x=np.array(your_list)

答案 4 :(得分:0)

您可以将np.where与numpy数组一起使用。以你的例子:

i = np.arange(23411)
label = np.where(i<=7, 0, np.where(i<=42, 1, 2))