需要将一系列值中的元素添加到列表中

时间:2018-11-16 12:52:06

标签: python

我们有元素= 0的此列表 例如:

A = [0 for x in range (35)]

此列表填充了35个零。

我有几个带有范围的列表(大约5个),可以从带有表的文件中使用: 示例:

15 20
20 3
12 5
5 1
7 22



for i in file:
    start_elem = min(i[0], i[1])
    end_elem = max(i[0], i[1]) #Here it takes the maximum and minimum values from the table from the file.

我需要在每个周期“ for”之后,他将单位添加到我的列表中,在该列表中,我的索引为零(在周期(start_elem,end_elem)中指示)。 此选项不起作用:

for j in A[int(start_elem):int(end_elem)]:
     j+=1
     print(A)

结论应该像这样

[0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0]

我的代码是:

L = [0 for j in range (36)]
for i in file:

    start_elem = min(i[0], i[1])
    end_elem = max(i[0], i[1])

    for j in L[int(start_elem):int(end_elem)]:
        j+=1
        print(L)

        file_new.write(str(L))
gen_file.closed
gen_file_new.closed

3 个答案:

答案 0 :(得分:0)

首先,您应该正确计算最小和最大。然后考虑以下几点:

for i in file:
    start_elem = min([i[0], i[1]])
    end_elem = max([i[0], i[1]]) 


    for j in range(int(start_elem):int(end_elem)):
        A[j]+=1
        print(A)

答案 1 :(得分:0)

j只是一个循环变量。重新绑定它不会影响A。改为:

A = [0 for x in range (35)]
file = [[15, 20], [20, 3], [12, 5], [5, 1], [7, 22]]

for i in file:
    start, end = sorted(i)
    for x in range(start, end):
        A[x] += 1  # rebind the actual list index
A
# [0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

答案 2 :(得分:0)

对于这个问题,Python列表列表不是 的数据结构的很好选择,因为您正在更新Python级嵌套循环中的值。如果您可以使用第3方库,则可以使用NumPy:

import numpy as np
from io import StringIO

x = StringIO("""15 20
20 3
12 5
5 1
7 22""")

# define array of zeros
A = np.zeros(35)

# replace x with 'file.csv'; load and sort indices
index_array = np.sort(np.loadtxt(x, dtype=int), axis=1)

# iterate array of sorted indices
for start, end in index_array:
    A[start: end] += 1

array([ 0.,  1.,  1.,  2.,  2.,  2.,  2.,  3.,  3.,  3.,  3.,  3.,  2.,
        2.,  2.,  3.,  3.,  3.,  3.,  3.,  1.,  1.,  0.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])