在python中不使用任何count方法保持列表中的单词计数?

时间:2014-03-06 16:25:58

标签: python list python-3.x count

我需要在列表中显示一次列表中的单词计数,并且在不使用任何计数方法的情况下显示两次出现的单词列表,我尝试使用集合,但它只删除副本而不是原始副本。有没有办法让单词出现在一个列表中,而单词出现在另一个列表中两次?

示例文件是text = ['Andy Fennimore Cooper\n', 'Peter, Paul, and Mary\n', 'Andy Gosling\n'],因此技术上是Andy,Andy将在一个列表中,其余的在另一个列表中。

不允许使用词典:/

for word in text:
    clean = clean_up(word)
    for words in clean.split():
        clean2 = clean_up(words)
        l = clean_list.append(clean2)
        if clean2 not in clean_list:
            clean_list.append(clean2)
        print(clean_list)

4 个答案:

答案 0 :(得分:1)

这是一种非常糟糕的,非语言的做事方式;但是一旦你不允许反击和dict,这就是剩下的一切。 (编辑:除了集合, d'oh!

text = ['Andy Fennimore Cooper\n', 'Peter, Paul, and Mary\n', 'Andy Gosling\n']

once_words = []
more_than_once_words = []

for sentence in text:
    for word in sentence.split():
        if word in more_than_once_words:
            pass   # do nothing
        elif word in once_words:
            once_words.remove(word)
            more_than_once_words.append(word)
        else:
            once_words.append(word)

导致

# once_words
['Fennimore', 'Cooper', 'Peter,', 'Paul,', 'and', 'Mary', 'Gosling']

# more_than_once_words
['Andy']

答案 1 :(得分:0)

如果你可以使用一套(我也不会使用它,如果你不允许使用词典),那么你可以使用该套来跟踪你所看到的单词......和另一个出现不止一次的单词。例如:

seen = set()
duplicate = set()

然后,每次你得到一个单词,测试它是否在seen。如果不是,请将其添加到seen。如果它位于seen中,请将其添加到duplicate

最后,您有一组seen个字词,其中包含所有字样,还有一个duplicate字符集,其中包含所有出现过多次字样的字词

然后你只需要从duplicate中减去seen,结果是没有重复的单词(即只出现一次的单词)。

这也可以仅使用列表来实现(对于你的作业来说会更诚实,如果有点费力)。

答案 2 :(得分:0)

from itertools import groupby
from operator import itemgetter
text = ['Andy Fennimore Cooper\n', 'Peter, Paul, and Mary\n', 'Andy Gosling\n']
one, two = [list(group) for key, group in groupby( sorted(((key, len(list(group))) for key, group in groupby( sorted(' '.join(text).split()))), key=itemgetter(1)), key=itemgetter(1))]

答案 3 :(得分:0)

删除关键数据结构或循环或其他什么是一个愚蠢的问题。为什么不只是程序是C呢?告诉你的老师找个工作......

编辑方面,这是一个解决方案:

>>> text = ['Andy Fennimore Cooper\n', 'Peter, Paul, and Mary\n','Andy Gosling\n']
>>> data=' '.join(e.strip('\n,.') for e in ''.join(text).split()).split()
>>> data
['Andy', 'Fennimore', 'Cooper', 'Peter', 'Paul', 'and', 'Mary', 'Andy', 'Gosling']
>>> [e for e in data if data.count(e)==1]
['Fennimore', 'Cooper', 'Peter', 'Paul', 'and', 'Mary', 'Gosling']
>>> list({e for e in data if data.count(e)==2})
['Andy']