Python:从索引列表创建数组

时间:2015-05-19 16:32:45

标签: python arrays list

我有一个文件,其内容如下:

1   257.32943114
10  255.07893867
100     247.686049588
1000    248.560238357
101     250.673715233
102     250.150281581
103     247.076694596
104     257.491337952
105     250.804702983
106     252.043717069
107     253.786482488
108     255.588547067
109     251.253294801
...

我想要做的是从此列表创建一个数组,第一列中的数字作为索引。例如,数组的第一个元素是257.32943114,对应于列表中的1,数组的第109个元素将是251.253294801,对应于列表中的数字109,依此类推。我怎样才能在Python中实现这一目标?

3 个答案:

答案 0 :(得分:1)

可能你想要一本字典,而不是一个列表,但如果你想要一个列表:

def insert_and_extend(lst, location, value):
   if len(lst) <= location:
      lst.extend([None] * (location - len(lst) + 1))
   lst[location] = value

mylist = []
insert_and_extend(mylist, 4, 'a')
insert_and_extend(mylist, 1, 'b')
insert_and_extend(mylist, 5, 'c')
print mylist

将其作为字典:

dict = {}
dict[4] = 'a'
dict[1] = 'b'
dict[5] = 'c'
print dict

答案 1 :(得分:1)

分隔符:您可以在分割线中使用制表符或空格

file = open(location, 'r')
dictionary = {}
for line in file.readlines():
    aux = line.split('  ') #separator
    dictionary[aux[0]] = aux[1]
print dictionary

如果您的值类似于'257.32943114 \ n',则可以使用词典[aux [0]] = aux [1] [: - 1]来逃避新行的字符。

答案 2 :(得分:1)

如果你坚持使用列表,这是另一个更加pythonic的解决方案:

with open('test.in', 'r') as f:
    r = []
    map(lambda (a,b): [0, [r.append(0) for i in xrange(a - len(r))]] and r.append(b), sorted([(int(l.split(' ')[0]), float(l.split(' ')[-1])) for l in f], key=lambda (a,b): a))

r正是您要找的。