在Python中搜索一串字符中的单词

时间:2017-07-04 23:35:20

标签: python python-2.7 python-3.x

大家好我在Python中有两个字符串:

str1 = "honey"
str2 = "eeehanoey"

如果True中的所有字母都在str1str2,我希望该程序返回False,否则,我已尝试使用in但不起作用,请回复False

谢谢

3 个答案:

答案 0 :(得分:2)

如果重复计数不重要,那么这是一套方法。

df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

print(df.reindex(pd.date_range('2017-01-01', '2017-01-08')).fillna(0))

            my_count
2017-01-01       6.0
2017-01-02       0.0
2017-01-03       0.0
2017-01-04       5.0
2017-01-05       3.0
2017-01-06       0.0
2017-01-07       0.0
2017-01-08       8.0

或者(慢)......

>>> s1 = set(str1)
>>> s2 = set(str2)
>>> s1.intersection(s2) == s1
True

更新:添加处理重复项的方法。

>>> s1 = ''.join(sorted(str1))
>>> s2 = ''.join(sorted(str2))
>>> s1 in s2
True

输出:

from collections import Counter

def match(str1, str2):
    c1 = Counter(str1)
    c2 = Counter(str2)

    for c in c1:
        if c not in c2 or c1[c] > c2[c]:
            return False

    return True

答案 1 :(得分:1)

这样做:

def lettersmatch(str1, str2):

    #loop through each letter in str1
    for letter in str1:
        #if this letter is not in the second string, return false
        if not letter in str2:
            return False

    #if we get here, the letters match
    return True

注意:这假定" aacd"和" acd"应该被认为是平等的。 (基本上,这假设重复是不重要的。)

答案 2 :(得分:0)

这将有效:

all([c in str2 for c in str1])

或者如果你关心重复,这将会这样做:

all([str2.count(c) <= str1.count(c) for c in str1])

>>> str1 = "honey"
>>> str2 = "eeehanoey"
>>> str3 = "hooney"
>>> all([str1.count(c) <= str2.count(c) for c in str1])
True
>>> all([str3.count(c) <= str2.count(c) for c in str3])
False

也许还有其他一些方法可以解决这个问题,但这些单行也不算太糟糕。