Python 如何检查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

一开始我知道这是一个非常常见的问题,但我还没有找到一个如此具体的问题。(如果你知道,请告诉我。)我发现的所有方法都不适合我。 我需要检查列表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, 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]