Создание списка парных элементов в python - PullRequest
2 голосов
/ 06 апреля 2020

Я хочу создать список парных номеров. Например, у меня есть список чисел следующим образом:

a = [1, 4, 7, 10, 13, 16, 19, 21, 24, 27, 30]

Я хочу создать парный список следующим образом:

paired_list_a = [[1,3],[4,6],[7,9],[10,12],[13,15],[16,18],[19,20],[21,23],[24,26],[27,29]]

То есть я хочу пропустить первый элемент и соедините числа с одним рядом с ними минус один.

Я пробовал что-то подобное, но не повезло

paired_list_a = [1, 4, 7, 10, 13, 16, 19, 21, 24, 27, 30]
row = [[a[i],a[i+1]-1] for i in range(len(a))]

, но выбрасывает IndexError: list index out of range

Кто-нибудь может мне помочь с этим?

Ответы [ 5 ]

3 голосов
/ 06 апреля 2020

Используйте zip здесь со всеми значениями одного и того же списка без первого значения:

row = [[x, y - 1] for x, y in zip(a, a[1:])]
print (row)

[[1, 3], [4, 6], [7, 9], [10, 12], [13, 15], [16, 18], [19, 20], [21, 23], [24, 26], [27, 29]]
2 голосов
/ 06 апреля 2020

Это потому, что последний номер не имеет преемника. Вы должны попробовать что-то вроде:

row = [[a[i],a[i+1]-1] for i in range(len(a)-1)]

Если у вас есть шаблон в числах (например: каждый элемент - last_item + 2), вы можете связать последнее значение без цикла.

row[-1] = [a[-1], a[-1]+2]
2 голосов
/ 06 апреля 2020

Это вне диапазона, потому что для последней итерации l oop вы получаете доступ к индексу + 1.

# change range(len(a)) to range(len(a)-1)
row = [[a[i],a[i+1]-1] for i in range(len(a)-1)]

[[1, 3], [4, 6], [7, 9], [10, 12], [13, 15], [16, 18], [19, 20], [21, 23], [24, 26], [27, 29]]
1 голос
/ 06 апреля 2020

Пожалуйста, используйте:

range(len(a)-1) вместо range(len(a)), что является основной причиной, по которой вы получаете IndexError: list index out of range ошибку

1 голос
/ 06 апреля 2020
res = [] 
for index, item in enumerate(a[:-2]):
    res.append([item, a[index+1]-1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...