Объединение двух списков в другой список в Python

#python #arrays #list

#python #массивы #Список

Вопрос:

Предположим, у меня есть два таких списка,

 Ii = [[7,1],[7,5],[7,8],[5,8],[2,8],[3,5]]
ci = [11,5,3,5,5,4]
  

Теперь я хочу создать еще один список (I) из m x n, который будет выглядеть следующим образом,

 I = 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[11, 0, 0, 0, 5, 0, 0, 3, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 5, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 4, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 5, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  

Я попробовал этот код,

 m,n = 8,10    
I = [[0 for j in range(n)] for i in range(m)]
    for i, j in Ii:
        I[m - i][j - 1] = 1
  

Которые имеют вывод выглядит следующим образом,

 I = 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 1, 0, 0, 1, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  

Теперь у меня есть 1, где я хотел получить значения ci. Но я хочу поместить значения ci в места 1. Нужна помощь относительно того, как я могу это сделать?

Комментарии:

1. Что такое n и что такое m ?

2. можете ли вы объяснить, какова логика создания I формы Ii и ci ?

3. Можете ли вы объяснить логику, по которой два входных списка приводят к списку 4×4? На секунду я подумал, что это может быть «присвоить значения из второго списка соответствующим координатам из первого списка», но это не то, как выглядит ваш пример вывода.

4. Извините за отсутствие информации, m = 4 и n = 4 для матрицы 4×4 (n не используется). Логика заключается в создании списка, который имеет обратный номер индекса в вертикальной строке (m-по вертикали) и (по горизонтали-1) в горизонтальном индексе. но вы также можете напрямую использовать (i, j) в качестве индекса без проблем. Мне нужно только знать, как передать значения ci для замены единиц?

5. Генри братан, он говорит, что индекс списка находится вне диапазона для матрицы 8×8.

Ответ №1:

 m = 8 
n = 10 
Ii = [[7,1],[7,5],[7,8],[5,8],[2,8],[3,5]]
ci = [11,5,3,5,5,4]

I = [[0 for j in range(n)] for i in range(m)]

for z, *j, in enumerate(Ii):
    for i, k in j:
        I[m-i][k-1] = ci[z]

for i in I:
    print(i)
  
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[11, 0, 0, 0, 5, 0, 0, 3, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 5, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 4, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 5, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  

Комментарии:

1. bro Ii и ci будут иметь одинаковую длину, но выходные данные I могут иметь разную длину.

2. Он не работает для следующих значений: m = 8 n = 10 Ii = [[7,1],[7,5],[7,8],[5,8],[2,8],[3,5]] ci = [11,5,3,5,5,4]

3. Пожалуйста, проверьте. Вывод неверный. Вам нужно поместить 11 в ячейку (7,1), 5 в ячейку (7,5), 3 в ячейку (7,8) и так далее. Вы помещаете 11 в несколько ячеек.

4. Вы не можете вызвать index number ни в какой логике, потому что он не относится. Вам нужно найти ‘1’ в моем коде и заменить его значениями ci.

5. Нет, братан, ты ошибаешься. m может быть любыми значениями. Это не связано со Ii. Пожалуйста, проверьте этот код: m = 8 n = 10 Ii = [[7,1],[7,5],[7,8],[5,8],[2,8],[3,5]] ci = [11,5,3,5,5,4] I = [[0 for j in range(n)] for i in range(m)] for i, j in Ii: I[m - i][j - 1] = 1 Это поместит 1 во все места Ii, где я использовал метод обратного индексирования. Это никогда не связано с ci. и m не зависит, вы можете поставить m = 100, и это тоже сработает.