Как сравнять списки на Python

  1. Сглаживание мельчайшего списка Python
  2. Глубокое сплющивание списка на Python

плоский - операция, при которой мы берем список вложенных списков и преобразовываем его в другую структуру данных, которая не содержит вложенных списков. Вместо этого, он включает в себя все элементы из всех списков, которые были изначально вложены. Такая структура данных называется flat или flattened списком.

Первоначальный список может содержать вложенные списки только первого уровня вложенности, для пример [[1, 2], [3, 4]]. В противном случае, он содержит списки на втором, третьем и последующих уровнях вложенности, например [[1], [2]], [3, 4]]. Говорят, что такой список содержит глубоко вложенные списки.

Если же мы хотим вложить только один уровень вложенности, то мы называем его shallow flattening (сплющивание). Если же мы хотим выгрузить все уровни вложенности, то называем это глубоким сплющиванием.

Сглаживание мельчайшего списка Python

Простой подход к пониманию и визуализации заключается в использовании двойного цикла for.

Первый цикл for проходит через вложенные списки. Второй цикл for проходит по элементам каждого вложенного списка и присоединяется к плоскому списку результатов один за другим.

>>> flat_list = []
>>> original_list = [[1, 2], [3, 4]]
>>> for l in original_list:
...   for item in l:
...     flat_list.append(item)
...
>>> flat_list
[1, 2, 3, 4]

Вышеуказанный метод понятен и читабельный, но выразительность Python позволяет чтобы мы достигли одной и той же цели в одной строке. Здесь на помощь приходит Python’s list comprehesions.

>>> original_list = [[1, 2], [3, 4]]
>>> flat_list = [item for l in original_list for item in l]
>>> flat_list
[1, 2, 3, 4]

Если вам не нужен плоский список как таковой, но вы хотите иметь возможность выполнить итерацию по всем элементам. из всех подлистов, как если бы они исходили из одной плоской структуры данных, можно использовать itertools.chain().

>>> import itertools
>>> original_list = [[1, 2], [3, 4]] 
>>> iterator = itertools.chain(*original_list)
>>> for item in iterator:
...   print(item)
...
1
2
3
4

Если вы используете Pandas - пакет с открытым исходным кодом для анализа данных на Python - есть и встроенный способ.

>>> from pandas.core.common import flatten
>>> original_list = [[1, 2], [3, 4]]  
>>> flat_list = list(flatten(original_list))
>>> flat_list
[1, 2, 3, 4]

Глубокое сплющивание списка на Python

Как упоминалось выше, мелкое сплющивание не сработает, если у нас есть глубоко вложенные списки. Это будет нестись только на первом уровне вложенности, как показано в примере ниже.

>>> deeply_nested_list = [[[1, 2], 3], [4, 5, 6]]
>>> flat_list = [item for l in deeply_nested_list for item in l]
>>> flat_list
[[1, 2], 3, 4, 5, 6]

Для выполнения глубокого сплющивания используйте iteration_utilities.deepflatten()из iteration-utilities PyPI пакета.

Сначала установите сам пакет PyPI.

$ pip install iteration-utilities

Затем расплющите свои глубоко вложенные списки.

>>> from iteration_utilities import deepflatten
>>> deeply_nested_list = [[[1, 2], 3], [4, 5, 6]]
>>> flat_list = list(deepflatten(deeply_nested_list))
>>> flat_list
[1, 2, 3, 4, 5, 6]

Сопутствующая статья - Python List

  • В чем разница между списочными методами добавлять и расширять
  • Как преобразовать список в струну на Python
  • Как соединить два или несколько списков на Python
  • В чем разница между делом, удалением и попаданием в списки Pythonа
  • Как быстро проверить, существует ли значение в списке Python
  • Как дублировать список на Python
  • Как создать список с определенным размером на Python
  • comments powered by Disqus