比较python中列表中字符串的出现情况

2024-04-16 15:24:40 发布

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

我是python的超级新手。我有点困在课堂练习上了。 问题是这样的:您有一个包含字符(即单词)的文件。(我仍处于所有术语混淆的阶段,如果这不是正确的术语,我深表歉意) 示例文件.txt内容:accbd

这个问题要求我将文件导入到python编辑器中,并确保出现的字母不会超过字母表中出现的字母。e、 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

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


Tags: and文件thetxt示例readdata字母
2条回答

我已经发布了一个答案,但我看到这是一个作业,所以我会尽量解释,而不是只是在这里挥霍解决方案。你知道吗

我的建议是分三步解决:

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

  • data字符串中,可以使用set(data)来选取每个唯一的字符
  • 如果您在这个集合上使用sort(),您可以创建一个按字母顺序排序的字符列表。你知道吗

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

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

更清楚一点:

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循环。你知道吗

相关问题 更多 >