测试所有字母?

2024-10-02 18:19:39 发布

您现在位置: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

Tags: 代码in脚本numberforif字母line
3条回答
# If the line "ardvrk" should match, this is a solution:
chars=set('aardvark')
for nr, line in enumerate(open('input.txt', 'rU')):
    if not chars-set(line): # is subset?
        print 'match', nr, line,

每次您想用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))

给定输入行

dffdaardvarksdsda

柜台应该是这样的

^{pr2}$

以及

Counter({'a': 3, 'r': 2, 'd': 1, 'k': 1, 'v': 1})

你要搜索的信件列表。在

我们使用一个技巧,简单地减去两个计数器advl - Counter(line.lower()),然后检查结果计数器是否没有剩余的元素。在


其他注意事项:

您可以使用with语句确保文件关闭。
您可以使用enumerate代替计算行号。在

如果advk list是可变的,并且内容是从其他地方读取的,那么为了保持列表中唯一的元素,可以将其转换为set and check。在

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

在k'行中避免了一个唯一的检查。在

相关问题 更多 >