检查一个字符串中的字母是否在另一个字符串中

时间:2018-12-17 22:45:58

标签: python python-3.x algorithm

Okey,所以基本上我必须检查一个字符串是否与另一字符串相同。这两个字符串都是通过 input() 获得的。

我不想再次检查另一个字符串中是否有字母,因此,如果我已经检查过该字母,我想跳到下一个字母。

我现在的代码是这样:

str1, str2 = list(input()), list(input()) 

if len(str1) > len(str2):
    str = str1
else: 
    str = str2

for x in str:
    c = 0
    if x in str2:
        c += 1
if c != 0:
    print("Both have the same letters!") 
else: 
    print("Nope there are some letters missing..")

我不知道我是否应该使用列表而不是使用计数器。.请对该解决方案进行详细说明,或者将获得一些良好的质量指导! <3

4 个答案:

答案 0 :(得分:3)

将字符串转换为单个符号集会删除重复的符号,因此我们可以简单地比较它们:

if set(str1) == set(str2):
    print("Both have the same letters!") 
else:
    print("Nope there are some letters missing..")

注意:

由于集合中元素的顺序并不重要,我们甚至可以比较它们,例如。 g。

if set(str1) <= set(str2):        # <= means "is subset" in this context
    print("All symbols in str1 are in str2, too.")

if set(str1) < set(str2):        # < means "is a proper subset" in this context
    print("All symbols in str1 are in str2, too, "
          "but str2 has at least 1 symbol not contained in str1.")

答案 1 :(得分:0)

代码中的一些问题是,即使str2比str1长,str2总是用于比较。

for x in str:
    c = 0
    if x in str2:

接下来,将str中每个字符的c设置为0,相反,您可以使用一个计数器来计算不在另一个字符串中的字符数

这应该可以完成

str1, str2 = list(input()), list(input()) 

if len(str1) > len(str2):
    str = str1
    compared_string = str2
else: 
    str = str2
    compared_string = str1

not_in_other_string = 0
for x in str:
    if x  not in compared_string:
        not_in_other_string += 1
if not_in_other_string == 0:
    print("Both have the same letters!") 
else: 
    print("Nope there are some letters missing..")

答案 2 :(得分:0)

听起来您想查找一个字符串中的所有字符是否都在某个较大的字符串中。

您可以使用unique = ''.join(set(substring))获取子字符串中的字符列表,然后创建list comprehension以获取较大字符串中的所有字符。

这是我的例子:

unique = ''.join(set(substring))
not_in = [char for char in unique if char not in superstring]

现在,您可以检查not_in以查看它是否为null,否则子字符串中有一个不属于超字符串的字符。

例如:

superstring = "hello"
substring = "xllo"

unique = ''.join(set(substring))
not_in = [char for char in unique if char not in superstring]

print not_in
>>>['x']

print not_in == []
>>>False

通常,在python中执行操作的首选方法是使用列表推导或使用一些已经为您检查字符串的内置函数,而不是C样式,即您经过循环并显式检查字母是否为字母。这是pythonic编程的惯用方式。

打破列表的理解,我们有这样一个循环:

   for char in unique: 
        if char not in superstring:
             char #char meets conditions so it is the value used in [char ... 

这是我要进行的修改

str1, str2 = input(), input()

unique = ''.join(set(str1))
not_in = [char for char in unique if char not in str2]

if not_in == []:
    print("Both have the same letters!") 
else: 
    print("Nope there are some letters missing..")

答案 3 :(得分:0)

str1, str2 = input().split()

if len(str1) > len(str2):
    string_to_check= str1
    string_from_which_to_check = str2
else: 
    string_to_check = str2

string_from_which_to_check = str1    
not_in_other_string  = set(string_to_check) - set(string_from_which_to_check)
if len(not_in_other_string )==0:
     print("character are present in string")
else:
    print("{} not present in string".format(str(not_in_other_string )))