简体   繁体   中英

Check if double of element in first list is present in second list and print the output

Suppose

List1 = [ 23, 45, 6, 7, 34]
List2 = [46, 23, 1, 14, 68, 56]

Compare List1 and List2 and print the element of List1 which have a double value in List2

Output = [23,7,34]

尝试这个:

Output = [i for i in List1 if i*2 in List2]

You can convert list2 to a set for efficient lookups, and use a list comprehension with the said condition for the desired output:

set2 = set(List2)
[i for i in List1 if i * 2 in set2]

You already have the answer but just of the sake of simplicity. Basically you want to iterate through List1 and check if double value is in List2 . If so add element to the output array.

List1 = [ 23, 45, 6, 7, 34]
List2 = [46, 23, 1, 7, 14, 68, 56]

output = []

for i in List1:
    if i*2 in List2:
        output.append(i)

print output

You already got the answers. However, just for fun, I came up with the following method. I did not benchmark all the approaches listed here. It can be fun to do that. This is an interesting question and can be investigated more. However, just for the sake of it I present the solution I did.

import numpy as np
l = np.array(List1) * 2
print(l)

## array([46, 90, 12, 14, 68])

print(set(l) & set(List2))
## {68, 46, 14}

l2 = set(l) & set(List2)

print([List1[list(np.nonzero(l == i))[0][0]] for i in l if i in l2])
## [23, 7, 34]

It uses the broadcasting of numpy along with the fast intersection operation of Python set. This maybe useful if the two lists are very big.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM