2015-03-04 2 views
0

У меня есть последовательность случайных чисел, помещенных в список Python:Как разместить номера в списке питона в индексе их величины

[5,2,1,4,3] 

Я хотел бы поместить каждое число в новом list однополых длина в зависимости от величины числа, как это:

[[0,0,0,0,5],[0,2,0,0,0],[1,0,0,0,0],[0,0,0,4,0],[0,0,3,0,0]] 
+6

Что вы пробовали? (Приоритеты, которые вы собираетесь получить, связаны с отсутствием усилий, которые вы поставили перед ответом на свой собственный вопрос) см .: http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist –

ответ

0

Вы можете использовать список понимание вместе с петлей для заполнения в вашем списке.

>>> max_len=max(l) 
>>> new = [[0 for _ in range(max_len)] for _ in range(max_len)] 
>>> for i,v in enumerate(l): 
...  new[i][v-1] = v 
... 
>>> new 
[[0, 0, 0, 0, 5], [0, 2, 0, 0, 0], [1, 0, 0, 0, 0], [0, 0, 0, 4, 0], [0, 0, 3, 0, 0]] 

Или вы можете использовать numpy.zeros в списке понимание в одной строке:

>>> import numpy as np 
>>> l=[5,2,1,4,3] 
>>> max_len=max(l) 
>>> [[elem if elem-1==i else v for i,v in enumerate(arr)] for elem,arr in zip(l,[np.zeros(max_len) for _ in range(max_len)])] 
[[0.0, 0.0, 0.0, 0.0, 5], [0.0, 2, 0.0, 0.0, 0.0], [1, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 4, 0.0], [0.0, 0.0, 3, 0.0, 0.0]] 
+2

Пожалуйста, объясните вниз. Я хотел бы исправить свои ошибки. Помогите мне, заставив меня понять правильный путь. –

-1
  • Создать новый список
  • Iterate существующий список
  • для каждого значения, создать новый список, что размер
  • заполнить новый список
  • добавить новый список список А
0
numbers = [5,2,1,4,3] 
size = max(numbers) 

results = [] 

for num in numbers: 
    arr = [0] * size 
    arr[num-1] = num 
    results.append(arr) 

print results 

--output:-- 
[[0, 0, 0, 0, 5], [0, 2, 0, 0, 0], [1, 0, 0, 0, 0], [0, 0, 0, 4, 0], [0, 0, 3, 0, 0]] 
0
initial = [5, 2, 1, 4, 3] 
final = [] 
for x in initial: 
    temp = [0 for i in range(len(initial))] 
    temp[x-1] = x 
    final.append(temp) 
print(final) 
0

Это будет работать:

tmp_lst = [] # The new list you want 
lst = [5,2,1,4,3] 
lst.sort() #Sort the list, so it become [1,2,3,4,5] 
for i, num in enumerate(lst): 
    tmp_lst.append([0]* len(lst)) #Adding a list of 0 the same lenght as your initial list 
    tmp_lst[i][i] = num # Insert the value of your list at the right place 
Смежные вопросы