查找两个字符串之间的常见字符

时间:2018-02-04 18:20:52

标签: python python-3.x for-loop

我正在尝试使用for循环打印来自两个不同用户输入的常用字母。 (我需要使用for循环来完成它。)我遇到了两个问题:1。我的语句“如果char不在输出中......”并没有提取唯一值。输出给出了一个单独的字母列表而不是单个字符串。我尝试拆分输出,但拆分遇到类型错误。

wrd = 'one'
sec_wrd = 'toe'

def unique_letters(x): 
    output =[]
    for char in x: 
        if char not in output and char != " ": 
            output.append(char)
    return output

final_output = (unique_letters(wrd) + unique_letters(sec_wrd))

print(sorted(final_output))

3 个答案:

答案 0 :(得分:4)

您正在尝试执行Set Intersection。 Python有set.intersection方法。您可以将它用作您的用例:

>>> word_1 = 'one'
>>> word_2 = 'toe'

#    v join the intersection of `set`s to get back the string
#    v                             v  No need to type-cast it to `set`.
#    v                             v  Python takes care of it
>>> ''.join(set(word_1).intersection(word_2))
'oe'

set将返回字符串中的唯一字符。 set.intersection方法将返回两个集合中共有的字符。

如果您必须使用for循环,那么您可以使用 list comprehension

>>> unique_1 = [w for w in set(word_1) if w in word_2]
# OR
# >>> unique_2 = [w for w in set(word_2) if w in word_1]

>>> ''.join(unique_1)  # Or, ''.join(unique_2)
'oe'

使用显式for循环也可以实现上述结果:

my_str = ''
for w in set(word_1):
    if w in word_2:
        my_str += w

# where `my_str` will hold `'oe'`

答案 1 :(得分:3)

对于这类问题,你可能最好使用套装:

wrd = 'one'
sec_wrd = 'toe'
wrd = set(wrd)
sec_wrd = set(sec_wrd)

print(''.join(sorted(wrd.intersection(sec_wrd))))

答案 2 :(得分:0)

解决问题的功能

def find_common_characters(msg1,msg2):
    #to remove duplication set() is used.
    set1=set(msg1)
    set2=set(msg2)
    remove={" "}
    #if you wish to exclude space
    set3=(set1&set2)-remove
    msg=''.join(set3)
    return msg

提供输入并调用函数 为msg1,msg2提供不同的值并测试您的程序

msg1="python"
msg2="Python"
common_characters=find_common_characters(msg1,msg2)
print(common_characters)