Python 比较两个列表,如果第二个列表的元素出现在第一个列表中,则打印第二个列表的元素,但不要使用2 for循环
我必须比较两个列表,如果列表Python 比较两个列表,如果第二个列表的元素出现在第一个列表中,则打印第二个列表的元素,但不要使用2 for循环,python,list,Python,List,我必须比较两个列表,如果列表a的元素出现在列表b中,那么列表b的元素将被打印出来 a = [1, 3, 2, 1, 3] b = [2, 2, 1, 1, 1, 4, 2, 3] ans = [1, 1, 1, 3, 2, 2, 2, 1, 1, 1, 3] 我可以使用2 for循环得到答案,如: for a_ in a: for b_ in b: if a_ == b_: print b_ op: 1 1 1 3 2 2 2 1 1 1
a
的元素出现在列表b
中,那么列表b
的元素将被打印出来
a = [1, 3, 2, 1, 3]
b = [2, 2, 1, 1, 1, 4, 2, 3]
ans = [1, 1, 1, 3, 2, 2, 2, 1, 1, 1, 3]
我可以使用2 for循环得到答案,如:
for a_ in a:
for b_ in b:
if a_ == b_:
print b_
op: 1 1 1 3 2 2 2 1 1 1 3
但是我不想对循环使用2
。如何使用单个循环完成此操作?使用集合。计数器为您计数:
from collections import Counter
c = Counter(b)
ans = []
for x in a:
ans += [x]*c.get(x,0)
这是一种潜在的方法(有点混乱),只是发布它,因为事实证明制造商并没有得到正确的结果
[item for sublist in ([i] * b.count(i) for i in a) for item in sublist]
基本上,([i]*b.count(i)for i in a)
部分构建了一个列表,但它最终是一个列表列表,所以我做了[item for sublist in list for item in sublist]
的事情来平展列表
这可能有点类似于zondo的答案,但这会将其保留为数字列表而不是字符串。这应该是可行的:
for a_ in a:
if b.count(a_) :
ans+=((str(a_)+' ')*b.count(a_)).strip().split(' ')
计数(x)计数列表中x的发生次数
您可以简单地打印n次字符串:“'mystring'次”
希望我能帮助你 @sirpasselot的可能重复项:a
中的每个“1”(两者)都会导致打印b
中的所有三个“1”。为什么不使用两个for循环?可以用列表替换内部循环。您可以预处理b,将元素值的字典创建为适当长度的列表,然后连接这些列表的副本。这完全取决于背景。是否明确禁止对
循环使用两个嵌套的,或者在任何地方都不允许对
使用一次以上的?像这样的任意限制听起来像是家庭作业,通常不止一个。。。我们还应该知道其他限制,比如不允许使用的标准库模块?@sirpasselot谢谢你的回答,但我没有得到正确的答案。得到如下输出:2 1 2 3
。看起来a和b已切换。当我运行我的代码时,它给出了您期望的答案非常感谢@factor。这解决了我的问题。谢谢。我只是出于好奇。是否有其他方法不使用任何内置函数(如集合)?使用+=
方法附加到列表。顺便说一句,我想给出我自己的答案,这似乎是你已经给出的。@Agsthya,就像其他人已经给出的答案一样,你可以用b.count(x)来代替。我认为效率将取决于b的大小。我想你错过了一个关键问题,那就是在单循环中获得结果。是的,我注意到了,哈哈,直到我看到主循环不能正常工作,我才打算回答。这种方法确实使用了两个循环,但它只使用其中的一个来构建列表,而另一个只是将列表展平,而不是使用[i=j时a中i为i,b中j为i]
方法谢谢您的回答。这也在起作用。但打印结果是两次。
for a_ in a:
if b.count(a_) :
ans+=((str(a_)+' ')*b.count(a_)).strip().split(' ')