Python 如何检查1列表中的所有元素在列表2中是否处于*相同数量*的任意顺序?
一开始我知道这是一个非常常见的问题,但我还没有找到一个如此具体的问题。(如果你知道,请告诉我。)我发现的所有方法都不适合我。 我需要检查列表1的所有元素是否在列表2中以相同的数量出现 例: 我试着这样做:Python 如何检查1列表中的所有元素在列表2中是否处于*相同数量*的任意顺序?,python,python-3.x,Python,Python 3.x,一开始我知道这是一个非常常见的问题,但我还没有找到一个如此具体的问题。(如果你知道,请告诉我。)我发现的所有方法都不适合我。 我需要检查列表1的所有元素是否在列表2中以相同的数量出现 例: 我试着这样做: list1 = [6,2] import itertools for i in itertools.product((2,4,5,1), repeat=3) : asd = i[0] + i[1] asd2= i[1] + i[2] list2 = [asd, a
list1 = [6,2]
import itertools
for i in itertools.product((2,4,5,1), repeat=3) :
asd = i[0] + i[1]
asd2= i[1] + i[2]
list2 = [asd, asd2]
if all(elem in list2 for elem in list1):
print (i,list2)
当元素没有在列表1中重复时,它会工作,如[1,2]。但当它们被重复时,所有重复的元素只被计算为1:[2,2,2],其beeing被理解为[2]。或者我认为是这样。用于转换为dict\u项
查看(值、计数)对的集合。然后可以使用普通的集合操作
from collections import Counter
def a_all_in_b(a, b):
"""True only if all elements of `a` are in `b` in the *same quantity* (in any order)."""
return Counter(a).items() <= Counter(b).items()
从集合导入计数器
def a_all__in_b(a,b):
“”“仅当`a`的所有元素在`b`中的*数量*(以任何顺序)相同时,才为True。”
返回计数器(a).items()修改此项以检查发生的相等性:
from collections import Counter
list1 = [2,2,2,6]
list2 =[2,6,2,5,2,4]
def same_amount(a,b):
c1 = Counter(a)
c2 = Counter(b)
for key,value in c1.items():
if c2[key] != value:
return False
return True
print(same_amount(list1,list2))
print(same_amount(list1 + [2],list2))
输出:
True
False
创造这个答案几乎不需要转移知识,这就是为什么我认为这是一个骗局。这个问题只是讨论内容的一个更具体的例子
sub_list = [1, 1, 2, 3, 3, 3, 4, 4] # list1
test_list = [int(i) for i in input()] # list2
def convert(_list): # Converting list to dict with frequency
_dict ={}
for number in _list:
if number in _dict:
_dict[number] += 1
else:
_dict[number] = 1
return _dict
sub_dict = convert(sub_list)
test_dict = convert(test_list)
value = { k : sub_dict[k] for k in set(sub_dict) - set(test_dict) } # comparing frequency
print({True : "False", False : "True"}[len(value) >0 ])
产生
1234
True
[Program finished]
计数器模块最适合于这样的情况:在b([1],[1,1])
?@明天它应该返回False
,因为1不是“在相同的数量中”。@gilch关于这个问题有点模糊,但我必须承认,你可能对它的解释是正确的。@Tomothy32我想我们会发现作者是否接受或澄清了。而且,在阅读了这两个问题后,应该是,在我看来,它不像是重复的。这个问题关心的是数量,而不是顺序。另一个关注的是顺序,而不是数量。可能是重复的。将此命名为“列表间无序比较”是否正确?
1234
True
[Program finished]
21
False
[Program finished]