исправление a для l oop в python, где вы не используете переменную - PullRequest
0 голосов
/ 04 августа 2020

У меня есть 'for' l oop, где мне нужно выполнить итерацию по списку, но мне не нужна итерационная переменная с именем 'node'. Какой способ сделать это более элегантно?

for node in NODES:
    if i % 2 == 0:
        tex_pairs_to_swap_dict[NODES[i]] = NODES[i+1]
    i += 1

Ответы [ 4 ]

3 голосов
/ 04 августа 2020

Похоже, здесь действительно нужен индекс в NODES. Вы получаете это, используя range(len(NODES)), но range() также поддерживает необязательный параметр step, который позволит вам пройти через эти 2 за раз (примечание: вы также должны включить start, если хотите step ):

for i in range(0, len(NODES), 2):
    tex_pairs_to_swap_dict[NODES[i]] = NODES[i+1]

Предполагается, что в списке есть четное количество записей, и в противном случае появится IndexError.

В качестве альтернативы, если все вы пытаетесь do - это пошагово по списку 2 за раз, вы также можете использовать:

it = iter(NODES)
for k, v in zip(it, it):
    tex_pairs_to_swap_dict[k] = v

Это эквивалентно приведенному выше без создания it переменной:

for k, v in zip(*[iter(NODES)]*2):
    tex_pairs_to_swap_dict[k] = v

Это будет молча игнорировать последнее значение в списке нечетного размера.

0 голосов
/ 04 августа 2020

В python вы можете определить для l oop без переменной и по-прежнему получать доступ к ее содержимому. Например:

x = [1,2,3]

for _ in x: print (_)

предоставит вам вывод из:

1
2
3

Вы также можете сделать это со словарями. Например:

x = {1:10, 2:20}

for _,__ in x.items(): print (_,__)

вывод этого будет:

1 10
2 20

Таким образом, вы можете использовать _ как переменную и ссылаться на нее. Хотя вы можете подумать, что переменная не определена, это все еще одноразовая переменная. Более подробную информацию о _ можно найти в этом сообщении: Какова цель единственной переменной подчеркивания «_» в Python?

Исходя из этого, вы можете переписать свой код как следует:

for _ in NODES:
    if i % 2 == 0:
        tex_pairs_to_swap_dict[NODES[i]] = NODES[i+1]
    i += 1

При этом вам не нужно использовать переменную node

0 голосов
/ 04 августа 2020

Вы можете использовать функцию enumerate, которая возвращает кортеж с индексом и элементом.

for i, _ in enumerate(NODES):
    if i % 2 == 0:
        tex_pairs_to_swap_dict[NODES[i]] = NODES[i+1]
0 голосов
/ 04 августа 2020

Самый эффективный способ сделать это - использовать диапазон. Я бы порекомендовал вам сделать это:

for i in range(len(NODES)):
    if i % 2 == 0:
        tex_pairs_to_swap_dict[NODES[i]] = NODES[i+1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...