Я впечатлен и наслаждаюсь тем фактом, что простой оператор Python for
может легко распутать список списков без необходимости использования numpy.unravel
или эквивалентной функции сглаживания. Однако теперь компромисс заключается в том, что я не могу получить доступ к элементам списка, подобного этому:
for a,b,c in [[5],[6],[7]]:
print(str(a),str(b),str(c))
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 1)
и вместо этого это работает до длины-1 [5]
:
for a,b,c in [[1,2,3],[4,5,6],[7,8,9],[0,0,0], [5]]:
print(a,b,c)
1 2 3
4 5 6
7 8 9
0 0 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 1)
Логически не имеет смысла предполагать, что список будет иметь фиксированное количество элементов. Почему тогда Python позволяет нам предположить, что список списков всегда будет иметь одинаковое количество элементов?
Я хотел бы знать, что ожидает Python, потому что я хочу предвидеть неправильно отформатированные списки/подсписки.
Я копался в документации Python и Stackoverflow, но не нашел причин или того, как это делает интерпретатор.
Я предполагаю, что сглаживание массивов одинаковой длины является настолько распространенным явлением (например, уменьшение размерности машинного обучения, матричные преобразования и т. д.), что есть полезность в предоставлении этой функции в обмен на невозможность сделать то, что я пробовал. над.
for a,b,c in [[5],[6],[7]]:
не имеет абсолютно ничего общего с numpy. Это список Python. Иfor a,b,c in [[1,2,3],[4,5,6],[7,8,9],[0,0,0], [5]]:
тоже. - person roganjosh   schedule 15.03.2019numpy
поведением. Это базовая итерация Python. Во-вторых, вы, кажется, путаете два элемента - итерациюfor
и распаковкуa,b,c
. Распаковка негибкая, когда дело доходит до количества ожидаемых элементов, в данном случае 3 (одно значение для каждой переменной). Кроме того, он не позволяет вам ничего предполагать - он увеличивает время выполненияValueError
, если вы ошибаетесь. (это несоответствие не является синтаксической ошибкой). - person hpaulj   schedule 15.03.2019l[2]
, или почему он позволяет вам считать, что каждый элемент списка является числом, когда вы пишетеfor x in l: s += x
. Почему бы тебе не позволить? - person user2357112 supports Monica   schedule 15.03.2019