Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
738 views
in Technique[技术] by (71.8m points)

python - Convert a for loop to a list comprehension

I have a for loop that compares a substring of each element in a list of strings to the elements in another list of strings.

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

However I would like to put it in a list comprehension (for loops aren't as concise for my tastes) But can't find a way to do it with the calculation of mat.

I have tried variations on:

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

But this is not the same logic as the original loop. Is there a way to reform the original for loop into list comprehension?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

As it is written, no you cannot directly write it as a list comprehension.

however, if you rewrite the computation of mat to be a single expression. (in this case, you would use any)

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

Then move that definition directly into the if not condition:

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

Now it is pretty straight forward to convert:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...