【问题标题】:comparing occurrence of strings in list in python比较python中列表中字符串的出现
【发布时间】:2013-12-06 11:59:54
【问题描述】:

我是 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

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

【问题讨论】:

  • 查看 collections.Counter(string) - 从那里可能会很容易。也就是说,除非你的教授希望你用 collections.defaultdict(int) 甚至是普通的 dict 来做这件事。

标签: python


【解决方案1】:

我已经发布了一个答案,但我看到它是为了一个作业,所以我会尝试解释而不是在这里喷一个解决方案。

我的建议是分三步解决:

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

  • data 字符串中,您可以使用set(data) 选择每个唯一字符
  • 如果您在此集上使用 sort(),您可以创建一个按字母顺序排序的字符列表。

2) 然后在for 循环(或列表理解)中使用此列表来创建第二个列表,使用data.count(&lt;letter in the list&gt;) 创建它们在数据中出现的次数;请注意,第二个列表中的元素在技术上是根据您创建的第一个列表中字母的字母顺序排序的(因为 for 循环)。

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

【讨论】:

    【解决方案2】:

    更清楚一点:

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

    那么它只是一个带有 enumerate(list_) 的 for 循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2021-10-29
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多