Python-从列表中按前缀和后缀删除元组

时间:2018-08-26 08:49:42

标签: python tuples itertools

根据元组开始或结束的元组,从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 :(得分:3)

您甚至可以跳过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')]

答案 1 :(得分:2)

具有列表理解:

[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))

答案 2 :(得分:2)

通过遍历列表切片,完全避免使用前缀(a)和后缀(f)。

[(x, y) for x in l1[1:] for y in l2[:-1]]
# [('b', 'd'), ('b', 'e'), ('c', 'd'), ('c', 'e')]