List Comprehension:如果元素是同一列表中另一个元素的子字符串,则忽略元素

问题描述 投票:0回答:1

我有以下列表

lst = ['abc-123', 'bc', 'bcd-234', 'def-543', 'ijk-092', 'd']

使用列表理解和过滤器的组合,我可以得到这个结果

lst = ['abc-123', 'bcd-234', 'def-543', 'ijk-092']

我使用的代码lst = [x for x in lst if len(filter(lambda elem: x in elem, lst)) == 1]

我将如何纯粹以列表理解的方式来做,lst = [y for x in lst for y in lst if y in x and x != y]

但是这将返回子字符串['bc', 'bc', 'd', 'd']

python-2.7 list-comprehension
1个回答
0
投票

由于每个元素都取决于所接受的先前元素,因此您不能使用纯列表理解。

为了说明这一点,此代码有效:

L=[]
for l in lst:
  a=[l in x for x in L]
  if True in a: continue
  L.append(l)

尝试将此循环转换为“纯”列表理解,

L=[]
L=[l for l in lst if True in [l in x for x in L]]

[需要后者L引用当前外部循环中的更新的L,不是这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.