如何找到不在任何一个字符串中出现的字母?

时间:2016-04-25 02:24:00

标签: python

我需要编写代码,打印出不会出现在两个字符串中的任何一个字母的所有字母。所以基本上我所做的恰恰相反。打印出两个字符串中出现的所有字母。这是代码。我不确定如何更改它。

s1 = input('Enter a string:\n')
s2 = input('Enter second string:\n')
s1 = set(s1)
s2 = set(s2)

def notInother(s1, s2):
    chars = []
    for char in (s1,s2):
        if char not in s2:
            if char not in s1:
                chars.append(char)
    print(chars)

3 个答案:

答案 0 :(得分:5)

首先,您可以使用|合并两个集合,然后执行-以获取字母表中的所有字母,并删除字符串中的字母:

>>> from string import ascii_letters
>>> set(ascii_letters) - (s1 | s2)
{'e', 'f', 'g', 'h', 'i', 'j', 'k', ...}

您可能需要查看set operations以节省编写循环的麻烦。

使用for循环:

>>> from string import ascii_letters

>>> def notInother(s1, s2):
...     chars = []
...     for char in ascii_letters:
...         if (char not in s1) and (char not in s2):
...             chars.append(char)
...     return chars

答案 1 :(得分:1)

使用此:

import string
str1 = input('Enter a string:\n').lower()
str2 = input('Enter second string:\n').lower()
print(set(string.ascii_lowercase).difference(set((str1+str2).lower())))

说明:

  • set(string.ascii_lowercase)是一组小写字母

  • set((str1+str2).lower())给出串联的字符串1& 2 从使用中作为输入。

  • set1.difference(set2)给出了一个包含set1但不在set2中的元素的集合。

答案 2 :(得分:0)

在这里,我试着写一个非常简单和基本的答案。

可以在string模块

中找到包含ASCII字母的字符串
from string import ascii_letters as letters

但当然您可以直接在代码中编写

letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

您需要两个字符串,其中包含要排除的字符

s1, s2 = 'abcdef', 'STUVWXYZ'

要解决您的问题,您可以使用列表理解构建包含剩余字母的列表(我认为代码是自解释的)

rl = [c for c in letters if c not in s1+s2]

最后,如果要打印代码的结果,可以使用空字符串的.join()方法

print(''.join(rl))

给你

ghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR