比较python中列表中字符串的出现次数

时间:2013-12-06 03:25:03

标签: python

我是python中的超级新手。我有点坚持参加我的课堂练习。 问题是这样的:你有一个包含字符即文字的文件。 (我仍处于所有条款混淆的阶段,如果这不是正确的术语,我道歉) file.txt内容示例:accbd

这个问题要求我将文件导入到python编辑器中,并确保没有字母比字母表中的字母更晚出现。例如a比b更频繁发生; b不能超过c,依此类推。在示例文件中,c比d更频繁出现,因此我需要引发错误消息。

这是我可怜的尝试:

def main():

f=open('.txt','r') # 1st import the file and open it. 

data = f.read() #2nd read the file

words = list(data) #3rd create a list that contains every letter

newwords = sorted(words) # sort according to alphabetical order

我被困在最后一部分,即计算前一个词不会比后一个词发生更多,依此类推。我尝试了两种方法,但两种方式都没有。这是试验1: 来自集合导入计数器

for i in newwords:
    try:
        if counter(i) <=counter(i+1):
            print 'ok'
        else:
            print 'not ok between indexes %d and %d' % (i, i+1)
     except:
        pass

第二次试验是类似的

for i in newwords:
    try:
        if newwords.count(i) <= newwords.count(i+1):
            print 'ok'
        else:
            print 'ok between indexes %d and %d' % (i, i+1)
    except:
        pass

按顺序比较每个单词的计数的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

要更清楚一点:

In [2]: string = 'accbd'

In [3]: import collections

In [4]: collections.Counter(string)
Out[4]: Counter({'c': 2, 'a': 1, 'b': 1, 'd': 1})

然后它只是一个带有枚举(list _)的for循环。

答案 1 :(得分:1)

我已经发布了一个答案,但我认为这是一项任务,所以我会尝试解释,而不是仅仅在这里解决方案。

我的建议是分三步解决:

1)在第一行中,创建一个出现在字符串中的有序字符列表:

  • 来自data字符串,您可以使用set(data)来挑选每个唯一字符
  • 如果您在此套装上使用sort(),则可以按字母顺序创建字符列表。

2)然后在for循环(或列表推导)中使用此列表,使用data.count(<letter in the list>)创建数据中出现次数的第二个列表;请注意,第二个列表中的元素在技术上按照您在第一个列表中字母的字母顺序排序(由于for循环)。

3)将第二个值列表与自身的排序版本(现在按值排序)进行比较,看看它们是否匹配。如果它们不匹配,那是因为与下一个字母相比,一些首字母出现的次数太多了。