2016-06-14 39 views
-4

我有一个for循环,它将字符串列表中每个元素的子字符串与另一个字符串列表中的元素进行比较。将for循环转换为列表理解

mylist = [] 
for x in list1: 
    mat = False 
    for y in list2: 
     if x[:-14] in y: 
      mat = True 
    if not mat: 
     mylist.append(x) 

不过,我想将它放在一个列表理解(for循环不适合我的口味为简洁),但不能找到一种方法与mat计算去做。

我曾尝试变化上:

mylist = [x for x in list1 if x[:-14] in list2] 

但是,这是不一样的逻辑作为原始循环。有没有办法将原来的循环改写成列表理解?

+4

无,这不是一项转换服务。如果您自己尝试过并卡住了某处,请提供[mcve]。还要注意并不是所有的'for'循环都可以成为列表解析。 – jonrsharpe

+1

我已经编辑了序言,因为元内容不属于问题,人们可以downvote他们是否给你一个答案/一个链接。它根本就不是*“显而易见,这是一个问题,所以它可以应用于更广泛的问题”*,**你真的要求你的一个例子被转换**,没有你自己的任何明显的努力代表。 – jonrsharpe

+0

你想让我提供我在这个网站上试过的所有其他东西的链接吗?这就是你的陈述所要达到的目标。这是一个简单的问题,我花费了更多的努力来证明我尝试过,而不是回答这个问题。相当荒谬的回应...我花了大概30分钟搜索和尝试之前发布 – user3496060

回答

2

经上所记,没有你不能直接把它写成一个列表理解。

但是,如果您将mat的计算重写为单个表达式。 (在这种情况下,你可以使用any

mylist = [] 
for x in list1: 
    mat = any((x[:-14] in y) for y in list2) 
    if not mat: 
     mylist.append(x) 

然后直接将这一定义成if not条件:

mylist = [] 
for x in list1: 
    if not any((x[:-14] in y) for y in list2): 
     mylist.append(x) 

现在是非常简单的转换:

mylist = [x for x in list1 if not any((x[:-14] in y) for y in list2)] 
+0

朋友,你读到问题的重点,并提供了一个简洁的答案,其中包括从for循环转换为列表理解的方法。我只是试了一下,效果很好。信仰在SO =恢复! – user3496060

+1

@ user3496060我很高兴我恢复了你的信仰,因为你很明显喜欢从例子中学习,我已经编辑了你的问题,我认为这很适合SO(原本是非常本地化的,不太可能帮助未来的观众)我希望它能让你更好地了解那种能够更好地接受的问题,所以你不会再失去信心! –

-1

您正在寻找这样的事情?:

mylist = [x for x in list1 if x[:-14] not in list2] 
+0

是的,我在发布之前试过这个(发现另一个例子),它没有奏效。 – user3496060