大家好我在Python中有两个字符串:
str1 = "honey"
str2 = "eeehanoey"
如果True
中的所有字母都在str1
和str2
,我希望该程序返回False
,否则,我已尝试使用in
但不起作用,请回复False
。
谢谢
答案 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
也许还有其他一些方法可以解决这个问题,但这些单行也不算太糟糕。