繁体   English   中英

检查第二个列表中是否存在第一个列表中元素的两倍并打印输出

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

假设

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

比较List1List2并在List2打印具有双List2值的List1的元素

Output = [23,7,34]

尝试这个:

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

您可以将list2转换为一个集合,以进行有效的查找,并使用具有上述条件的列表理解来获得所需的输出:

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

您已经有了答案,但是只是为了简单起见。 基本上,您想遍历List1并检查List2是否在List2 如果是这样,则将元素添加到output数组。

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

您已经有了答案。 但是,仅出于娱乐目的,我想出了以下方法。 我没有对这里列出的所有方法进行基准测试。 这样做很有趣。 这是一个有趣的问题,可以进一步研究。 但是,仅出于此目的,我介绍了我所做的解决方案。

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]

它使用numpy的广播以及Python set的快速交集操作。 如果两个列表很大,这可能很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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