2015-05-19 3 views
2

У меня есть файл с его содержимым, как это:Python: Создание массива из индексированного списка

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 
... 

То, что я хочу сделать, это создать массив из этого списка с номерами в первом столбце в качестве индекса. Например, 1-й элемент массива будет 257.32943114, который соответствует 1 в списке, 109-й элемент массива будет 251.253294801, что соответствует числу 109 в списке и т. Д. Как я могу достичь этого в Python?

+1

А как насчет ценности, где нет явного индекса? Как то, что значение в '[5]'? – CoryKramer

+2

Словарь может хорошо работать здесь – Ryan

+0

Что вы подразумеваете под «индексированным списком»? – farhawa

ответ

1

Если вы настаиваете на использование списка, здесь является еще более вещим решением:

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 является то, что вы ищете.

+0

Большое спасибо @ skies457 После запуска этого решения и печати r первый элемент массива равен 0. Я думаю, что это от r.append (0). Я попытался изменить/удалить 0 безрезультатно. Вы знаете способ, которым я могу удалить 0 в качестве первого элемента массива? – Amanda

+0

@ Аманда Я предполагаю, что индекс начинается с 0 .... Вы можете просто взять r = r [1:], то есть сохранить все элементы в r, кроме первого. – skies457

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 
+0

Я согласен. Я думаю, вы ищете словарь. Если вы используете первый номер только как индекс, то словарь будет идеальным. Проверьте [этот фрагмент кода] (http://pastebin.com/ASkxKZTh), если решение для словаря имеет смысл для вас. –

+0

Привет, MK, спасибо за ваш комментарий. Я не знал, что у Python есть словарь. Можете ли вы дать мне представление о том, как его реализовать? Еще раз спасибо. – Amanda

1

Сепаратор: вы можете использовать вкладку или пробелы в расщепленной линии

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

Если у вас есть что-то вроде «257.32943114 \ п», как ваши ценности, вы можете использовать вместо словаря [AUX [0 ]] = aux [1] [: - 1], чтобы уклониться от символа новой строки.

+0

Из вопроса, не похоже, что количество пробелов равно всем. Я думаю, что это хорошая идея для разделения с помощью модуля 're' для этого:' aux = re.split (r '+', line) ' –

+0

Привет @Carlos, спасибо за вашу помощь. Когда я печатаю словарь [aux [0]] ', я просто получаю только числа во втором столбце, но он несортирован. Я хочу сортировать числа во вторых столбцах на основе соответствующего индекса в первом столбце. Пожалуйста, как я могу это достичь? – Amanda

+0

Я использовал ключ табуляции, а не пробелы, и он работает ... возможно, все зависит от формата файла ... TY для вашей поддержки @AlokShankar –

Смежные вопросы