我需要在列表中显示一次列表中的单词计数,并且在不使用任何计数方法的情况下显示两次出现的单词列表,我尝试使用集合,但它只删除副本而不是原始副本。有没有办法让单词出现在一个列表中,而单词出现在另一个列表中两次?
示例文件是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)
答案 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']