Рубрики
Без рубрики

Python: Поведение

Подразделения (и список ссылок в частности), вероятно, являются функцией, которую я люблю больше всего … Помечено Python, целесообразным, фрагментами, JavaScript.

Подразделения (и список потенциалов в частности), вероятно, являются функцией, которую я люблю больше всего приходить от JavaScript в Python. Это позволяет вам написать краткий код для чего-то, что вы делаете очень часто: итерация по списку, немного изменяя данные («Массажирование данных») и возвращая список с новыми записями.

Одно следует отметить: Список понимания загрузка всего вывода в память, поэтому ее следует использовать только для небольших списков среднего размера. В случаях больших списков вместо этого используйте генераторы.

Основной синтаксис (для списков):

[expression for item in iterable if conditional]

Если вы хотите попробовать инструкции ниже, вы можете выстрелить в Python REPL. Если у вас установлен Python Run Python в вашем терминале. Любой код Python который начинается с >>> Символы указали, что он был напечатан в репре. Чтобы попробовать фрагменты JavaScript, вы могли бы использовать Quokka.js В вашем редакторе.

Примеры

Итализация на массиве и выдающая длину самого слова в новый список:

const names = ["James", "Naomi", "Amos", "Alex", "Bobbie", "Clarissa"]
const len_names = names.map((name) => name.length)
console.log(len_names)
// [ 5, 5, 4, 4, 6, 8 ]
>>> names = ["James", "Naomi", "Amos", "Alex", "Bobbie", "Clarissa"]
>>> len_names = [len(name) for name in names]
>>> print(len_names)
[5, 5, 4, 4, 6, 8]

Пропуская первый элемент и последний элемент (по индексу) и создавая список словарей:

const names = ["James", "Naomi", "Amos", "Alex", "Bobbie", "Clarissa"]
const names_list = names
  .filter((_, id) => id !== 0 && id !== names.length - 1)
  .map((name) => ({ name, length: name.length }))
console.log(names_list)
// [ { name: 'Naomi', length: 5 }, { name: 'Amos', length: 4 }, { name: 'Alex', length: 4 }, { name: 'Bobbie', length: 6 } ]
>>> names = ["James", "Naomi", "Amos", "Alex", "Bobbie", "Clarissa"]
>>> names_list = [{ "name": name, "length": len(name) } for idx, name in enumerate(names) if idx != 0 and idx != len(names)-1]
>>> print(names_list)
[{'name': 'Naomi', 'length': 5}, {'name': 'Amos', 'length': 4}, {'name': 'Alex', 'length': 4}, {'name': 'Bobbie', 'length': 6}]

Распаковка кортежа:

const students = [
  ["James", 16],
  ["Naomi", 20],
]
const nameWithAge = students.map((s) => [s[0].length + s[1], ...s])
console.log(nameWithAge)
// [ [ 21, 'James', 16 ], [ 25, 'Naomi', 20 ] ]
>>> students = [("James", 16), ("Naomi", 20)]
>>> nameWithAge = [[len(s[0])+s[1], *s] for s in students]
>>> print(nameWithAge)
[[21, 'James', 16], [25, 'Naomi', 20]]

Создание списка символов из строки:

const myName = "LekoArts"
const arr = [...myName]
console.log(arr)
// [ 'L', 'e', 'k', 'o', 'A', 'r', 't', 's' ]
>>> my_name = 'LekoArts'
>>> arr = [l for l in my_name]
>>> print(arr)
['L', 'e', 'k', 'o', 'A', 'r', 't', 's']

Реверсируя строки в кортеже и возвращая их в виде списка:

const words = ["kayak", "LekoArts", "radar", "python"]
const reversed = words.map((word) => word.split("").reverse().join(""))
console.log(reversed)
// [ 'kayak', 'strAokeL', 'radar', 'nohtyp' ]
>>> words = ("kayak", "LekoArts", "radar", "python")
>>> reversed = [word[::-1] for word in words]
>>> print(reversed)
['kayak', 'strAokeL', 'radar', 'nohtyp']

Вы также можете представить возможности. Вот 3 на 3 идентичности матрицы:

>>> matrix = [[1 if item_idx == row_idx else 0 for item_idx in range(0, 3)] for row_idx in range(0, 3)]
>>> print(matrix)
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]

Оригинал: “https://dev.to/lekoarts/python-comprehensions-2ho3”