Python - удаление кортежей по префиксу и суффиксу из списка - PullRequest
0 голосов
/ 26 августа 2018

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

Пример:

import itertools
l1 = ["a", "b", "c"]
l2 = ["d", "e", "f"]
tupl_lst = list(itertools.product(l1, l2))
tupl_lst
Out[42]: 
[('a', 'd'),
 ('a', 'e'),
 ('a', 'f'),
 ('b', 'd'),
 ('b', 'e'),
 ('b', 'f'),
 ('c', 'd'),
 ('c', 'e'),
 ('c', 'f')]

Я хочу удалить все кортежи, которые начинаются с 'a' ИЛИ заканчиваются на 'f', чтобы мой вывод выглядел следующим образом:

[('b', 'd'),
 ('b', 'e'),
 ('c', 'd'),
 ('c', 'e')]

Какой самый быстрый способ сделать это?

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

Вы можете даже пропустить itertools.product() и просто использовать одно понимание списка:

l1 = ["a", "b", "c"]
l2 = ["d", "e", "f"]

tupl_lst = [(x, y) for x in l1 for y in l2 if x!="a" and y!="f"]

#output
[('b', 'd'), ('b', 'e'), ('c', 'd'), ('c', 'e')]
0 голосов
/ 29 августа 2018

Избегайте префикса (a) и суффикса (f) в целом путем перебора фрагментов списков.

[(x, y) for x in l1[1:] for y in l2[:-1]]
# [('b', 'd'), ('b', 'e'), ('c', 'd'), ('c', 'e')]
0 голосов
/ 26 августа 2018

с пониманием списка:

[t for t in tupl_lst if t[0]!='a' and t[1]!='f']

с filter:

list(filter(lambda t: t[0]!='a' and t[1]!='f',tupl_lst))
...