Как распределить значения из списка кортежей в массив - PullRequest
0 голосов
/ 07 мая 2020

У меня есть список кортежей:

foo = [(1, 5), (1, 3), (1, 9), (2, 8), (2, 3), (3, 1)]

Я пытаюсь распределить значения из foo в array из arrays, и результат должен выглядеть так:

_result[0] = []
_result[1] = [5, 3, 9]
_result[2] = [8, 3]
_result[3] = [1]

И это мой код:

_result = [[]]

for x,y in foo:
   _result[x].append(y)

Но я получаю сообщение об ошибке:

IndexError: list index out of range

Как мне это исправить?

Изменить:

  • Результат не нужно упорядочивать
  • Массив в нулевой позиции должен содержать пустое поле

Пример простой, но foo также может содержать другие значения, такие как:

foo = [(9, 5), (10, 3), (10, 9), (5, 8), (5, 3), (9, 1)]

Результат:

_result[0] = []
_result[1] = []
_result[2] = []
_result[3] = []
_result[4] = []
_result[5] = [8, 3]
_result[6] = []
_result[7] = []
_result[8] = []
_result[9] = [5, 1]
_result[10] = [3, 9]

Таким образом, все значения, которые не находятся в позиции x, должны содержать an empty field по данному индексу

Ответы [ 2 ]

4 голосов
/ 07 мая 2020

Здесь вы можете использовать dict.

Пример:

foo = [(1, 5), (1, 3), (1, 9), (2, 8), (2, 3), (3, 1)]
result = {}
for k, v in foo:
    result.setdefault(k, []).append(v)

print(result) # -->{1: [5, 3, 9], 2: [8, 3], 3: [1]}

Вы также можете использовать collections.defaultdict вместо setdefault

2 голосов
/ 07 мая 2020
length = 0
_result = [[]]

for x, y in foo:
    if x > length:
        for i in range(x - length):
            _result.append([])
        length = length + x
    _result[x].append(y)

Проблемы в вашем коде:

  • Вы не можете получить доступ к позиции индекса в списке, где элемент не существует.

  • Невозможно добавить в несуществующий список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...