Как бы вы заархивировали неизвестное количество списков в Python?

Допустим, у меня есть следующие списки:

assignment = ['Title', 'Project1', 'Project2', 'Project3']
grades = [ ['Jim', 45, 50, 55], \
           ['Joe', 55, 50, 45], \
           ['Pat', 55, 60, 65] ]

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

zip(assignment, grades[0], grades[1], grades[2])

Как мне использовать функцию zip, чтобы заархивировать это, если список оценок содержит неизвестное количество элементов?


person Jim    schedule 09.05.2011    source источник


Ответы (2)


Вы можете использовать * для распаковки списка в позиционные параметры:

zip(assignment, *grades)
person sth    schedule 09.05.2011
comment
не могли бы вы уточнить? Можете ли вы добавить задание? В противном случае это не имеет смысла. - person rjurney; 31.08.2020

В дополнение к ответу sth выше, распаковка позволяет вам передавать параметры функции в виде массива, а не нескольких параметров в функцию. В документации приведен следующий пример:

list(range(3, 6))            # normal call with separate arguments
[3, 4, 5]
args = [3, 6]
list(range(*args))            # call with arguments unpacked from a list
[3, 4, 5]

В случае с zip() это было очень удобно для меня, так как я собираю некоторую логику, которую я хочу приспособить к количеству измерений в моих данных. Это означает сначала собрать каждое из этих измерений в массив, а затем предоставить их zip() с помощью оператора распаковки.

myData = []
myData.append(range(1,5))
myData.append(range(3,7))
myData.append(range(10,14))

zippedTuple = zip(*myData)

print(list(zippedTuple))
person jmil166    schedule 19.06.2021