0

首先请原谅我的任何含糊之处。我发现我的问题很难用英语解释。基本上我想做的是,将一大堆单词分成“N”个部分。

例如读取文件中的所有单词,然后将它们分成 N=10 个部分。更准确地说,我正在做一个数据挖掘项目。有数以千计的文档我需要对其中的单词进行排序。

说 n = 2 。我知道我可以将 am 和 nz 放在一个文件中。我需要一种算法,它可以为 n > 100 做到这一点。

PS:我的程序首先必须创建 N 个文件(或块),然后读取所有单词并根据它们的开始方式,将它们分配给其中一个块。

示例:输入:N = 2 个单词 = [....]

输出:[以am开头的单词],[以nz开头的单词]

换句话说,我想按字典顺序划分我的话

4

2 回答 2

1

这是您想要的粗略想法:

l = "i find my problem a bit hard to explain in English".split()
n = 2
ln = len(l)
chnk = ln / n
srt = sorted(l, key=str.lower) # use str.lower as the key or uppercase will come before lower
chunks = (srt[i:chnk+i] for i in xrange(0, len(srt), chnk))

In [4]: l = "i find my problem a bit hard to explain in English".split()
In [5]: n = 2    
In [6]: ln = len(l)
In [7]: chnk = ln / n    
In [8]: srt = sorted(l, key=str.lower)
In [9]: chunks = (srt[i:chnk+i] for i in xrange(0, len(srt), chnk))    
In [10]:     
In [10]: for chunk in chunks:
   ....:         print(chunk)
   ....:     
['a', 'bit', 'English', 'explain', 'find']
['hard', 'i', 'in', 'my', 'problem']
['to']

显然,当 n 个块没有均匀地划分为单词列表的长度时,您将不得不处理这种情况。

于 2014-12-14T11:19:53.957 回答
-1

您可以使用itertools.

from itertools import islice

# islice('ABCDEFG', 2) --> A B
# islice('ABCDEFG', 2, 4) --> C D
# islice('ABCDEFG', 2, None) --> C D E F G
# islice('ABCDEFG', 0, None, 2) --> A C E G

your_dict=[1,2,3,4,5]
first_chunk=islice(your_dict,2) #--> 1 2
second_chunk=islice(your_dict,2,None) #--> 3 4 5

之后,您可以islice将 wrap'em 的第二个和第三个参数放入函数中,

于 2014-12-14T11:19:40.877 回答