测试所有字母?

Dra*_*vic -1 python

我正在编写一个脚本,脚本应该读取一个文本文件并测试以确定每行上是否有指定的字母(a,a,r,d,v,a,r,k).我有一个问题,因为我试图检查3个不同的a而不是一个.我的代码如下:

#Variables
advk = ['a','a','r','d','v','a','r','k']
textfile = []
number = 0
life = 0

for line in open('input.txt', 'rU'):
    textfile.append(line.rstrip().lower())


while life == 0:
    if all(word in textfile[number] for word in advk):
        printed = number + 1
        print ("Aardvark on line " + str(printed))
        number+=1
        if number == len(textfile):
            life+=1

    else:
        number+=1
Run Code Online (Sandbox Code Playgroud)

slo*_*oth 8

每次你想在python中计算一些东西时,请记住Counter类.


from collections import Counter

advk = Counter(['a','a','r','d','v','a','r','k'])

with open('input.txt', 'rU') as file:
    for i, line in enumerate(file.readlines()):
        if not advk - Counter(line.lower()):
            print ("Aardvark on line " + str(i+1))
Run Code Online (Sandbox Code Playgroud)

给定输入线

dffdaardvarksdsda

柜台看起来像这些

Counter({'d': 5, 'a': 4, 'f': 2, 's': 2, 'r': 2, 'k': 1, 'v': 1})
Run Code Online (Sandbox Code Playgroud)

Counter({'a': 3, 'r': 2, 'd': 1, 'k': 1, 'v': 1})
Run Code Online (Sandbox Code Playgroud)

用于搜索的字母列表.

我们通过简单地减去两个计数器advl - Counter(line.lower())并检查结果计数器是否没有剩余元素来使用技巧.


其他注意事项:

您可以使用with语句来确保文件关闭.
您可以使用枚举而不是计算行号.