Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
734 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 Answer

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...