如何正确打印列表中每个字符串缺少的字母?

2024-04-25 18:54:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编码非常陌生,我有一个关于dict()函数的问题

最初,我需要制作一个程序,该程序接受一个字符串参数,并返回一个新字符串,其中包含字母表中所有不在参数字符串中的字母

要求包括使用以下两个全局参数和直方图功能

alphabet = "abcdefghijklmnopqrstuvwxyz"
test_miss = ["zzz","subdermatoglyphic","the quick brown fox jumps over the lazy dog"]



def histogram(s):
     d = dict()
     for c in s:
          if c not in d:
               d[c] = 1
          else:
               d[c] += 1
     return d

答案是

def missing_letters(s):
 h = histogram(s)
 m = []
 for c in alphabet:
 if c not in h:
  m.append(c)
 return ''.join(m)

for s in test_miss:
m = missing_letters(s)
if len(m):
 print(s,"is missing letters",m)
else:
 print(s,"uses all the letters")

**Output**
zzz is missing letters abcdefghijklmnopqrstuvwxy
subdermatoglyphic is missing letters fjknqvwxz
the quick brown fox jumps over the lazy dog uses all the letters
>>> 

现在我试图通过创建一个新的本地字典来摆脱直方图函数,我想如果我用新的本地字典替换直方图函数,它会起作用

def missing_letters(s):
    l = [1,2,3]
    h = dict(zip(s,l))
    m = []
    for c in alphabet:
         if c not in h:
           m.append(c)
    return ''.join(m)


for s in test_miss:
     m = missing_letters(test_miss)
     if len(m):
          print(s,"is missing letters",m)
     else:
          print(s,"OK")

然而,它不起作用

您可以看到输出与预期的不同:

zzz is missing letters abcdefghijklmnopqrstuvwxyz
subdermatoglyphic is missing letters abcdefghijklmnopqrstuvwxyz
the quick brown fox jumps over the lazy dog is missing letters abcdefghijklmnopqrstuvwxyz

为什么我的代码这次不起作用

附言

*我想知道如何用不同的本地字典替换直方图(这是一个字典)的返回值


Tags: the函数intestforif字典is
2条回答

您仅使用前3个字母。而不是

    l = [1,2,3]
    h = dict(zip(s,l))

我建议使用一套:

    h = set(s)

但是,当您调用函数时,您试图传递整个列表:

for s in test_miss:
     m = missing_letters(test_miss)
     # ...etc...

因此,它是在列表元素而不是字符串中的字符上循环

你的意思是:

for s in test_miss:
     m = missing_letters(s)
     # ...etc...

通过在一个函数中使用两个列表,您应该能够模拟它。此代码实现以下功能:

def lettercheck(sentence):
    letters = "abcdefghijklmnopqrstuvwxyz"
    letters = list(letters)
    sentence = sentence.lower()
    sentence = list(sentence)
    missing_letters = []
    for letter in letters:
        if letter not in sentence:
            missing_letters.append(letter)
    return ''.join(missing_letters)

之后,您所要做的就是调用该函数并向其传递一个参数

编辑:作为对注释的解释,您实际上可以使用missing_测试来传递多个句子并从中运行函数。最简单的方法是:

for i in missing_test:
    i = lettercheck(i)
    print(i)

至于我为什么使用这些列表,我将尝试一步一步地简要解释代码的作用

1-def lettercheck(sentence):存储传递给变量的任何字符串参数

2-letters等于您所说的alphabet,然后将其转换为letters = list(letters)行上的列表。如果在该点之后打印字母,输出将为[a,b,c,(...)]

3-你传递的字符串被降低(这样你也可以检查大写字母),然后变成一个列表,所以zzz变成[z,z,z]

4-创建一个空列表(缺少字母),因为稍后它将作为输出

5-此处的for循环检查字母表中的每个字母,然后检查它是否在为您传递的参数创建的列表中。如果它在列表中,它什么也不做。如果不是,则会将该字母添加到缺失字母列表中

6-return ''.join(missing_letters)将丢失的字母列表作为字符串返回

相关问题 更多 >