如果字符串与包含双精度Python-3.x的另一个字符串共享所有字符,则返回bool

424*_*247 4 python string python-3.x python-3.6

对不起,如果遇到类似的问题,我找不到了.

我需要检查是否string_a包含所有string_b包含非唯一字符的字符.

例1:

... string_a = 'baba'
... string_b = 'baaa'
... <solution here>
False
Run Code Online (Sandbox Code Playgroud)

示例2(返回True因为现在string_a有足够的'a's):

... string_a = 'ababa'
... string_b = 'baaa'
... <solution here>
True
Run Code Online (Sandbox Code Playgroud)

我试过set()方法,但只有在字符串的字符是唯一的时候才有效.所以我有这个:

... string_a = 'baba'
... string_b = 'baaa'
... return set(string_b) <= set(string_a)
True
Run Code Online (Sandbox Code Playgroud)

我希望它是False因为string_b有三个'a',string_a只有两个.

Ara*_*Fey 5

你正在做的是将字符串解释为多字节并检查一个是否是另一个的子集.Python的多集表示法是collections.Counter:

>>> from collections import Counter
>>> Counter('baba')
Counter({'b': 2, 'a': 2})
>>> Counter('baaa')
Counter({'a': 3, 'b': 1})
Run Code Online (Sandbox Code Playgroud)

不幸的是,Counter没有实现is_subset方法,所以我们必须自己编写.这有两种方法:

def is_sub_multiset(haystack, needle):
    haystack = Counter(haystack)
    needle = Counter(needle)

    return not needle - haystack
    # OR
    # return all(haystack[elem] >= count for elem, count in needle.items())
Run Code Online (Sandbox Code Playgroud)
>>> is_sub_multiset('baba', 'baaa')
False
>>> is_sub_multiset('ababa', 'baaa')
True
Run Code Online (Sandbox Code Playgroud)