在字符串中打印不包含的字母

4

我正在尝试查看一个单词或句子是否包含字母表中的每个字母,但我无法打印出不在该句子/单词中的所有字母。

alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t'
,'u','v','w','x','y','z']
x = raw_input('')
counter  = 0
counter2 = 0
for i in range(len(x))
    counter += 1
    for o in range(26):
        counter2 += 1
        if alpha[counter2] not in x[counter]:

我卡在那里了...

4个回答

4
alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t'
,'u','v','w','x','y','z'}
input_chars = set(raw_input())
print alphabet - input_chars

我们所做的就是将字母字符集与输入字符集之间的差异设置为不同。请注意,差异操作可以将任何可迭代对象作为第二个操作数,因此如果不想,我们甚至不必将输入转换为集合,尽管这会略微加快差异的速度。此外,有一个内置字符串可以给我们提供ascii字母,所以我们可以这样做:

import string
print set(string.ascii_lowercase) - raw_input()

2

使用 集合差

import string
x=raw_input()
not_found=set(string.ascii_lowercase) - set("".join(x.split()))
print (list(not_found))

输出:

>>> 
the quick brown fox
['a', 'd', 'g', 'j', 'm', 'l', 'p', 's', 'v', 'y', 'z']

实际上,使用 "".join(x.split()) 去除空格并不是必要的,因为集合差异不需要严格子集。 - amcnabb

2

既然您已经在迭代两个字符串,就没有必要使用countercounter2

您离成功很近了。Python使列表操作变得简单,因此无需使用索引逐个迭代列表元素:

alphabet = 'abcdefghijklmnopqrstuvwxyz'
sentence = raw_input('Enter a sentence: ').lower()  # Because 'a' != 'A'

letters = []

for letter in sentence:
    if letter in alphabet and letter not in letters:
        letters.append(letter)

print(letters)

这个不错,但它打印的是存在的内容而不是不存在的内容。 - user1730295
1
我相信你可以修改这段代码。如果你无法使用基本的Python列表和循环自己完成此操作,那么学习集合操作也没有什么用处。 - Blender

1

更加容易:

 import string
 x = raw_input()
 print [c for c in string.ascii_lowercase if c not in x]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接