2013-04-24 82 views
0

给出一个列表设置,项目通过索引

a_list=['chicken','pizza','burger','beer','vodka','potato','fries','mustache'] 

我试图做一个新的集中的每个六个字词的...

a_set=(['chicken','pizza','burger','beer','vodka','potato'],['pizza','burger','beer','vodka','potato','fries],['burger','beer','vodka','potato','fries','mustache']) 

我试图做这个索引..

index1=0 
index2=6 
a_set=[] 
while True: 
    a_set.append(a_list[index1:index2]) 
    index1+=1 
    index2+=1 
print (a_set) 

我似乎无法弄清楚我做错了什么。另外,一旦它结束了并且创建了所有六个单词短语并且到达列表的末尾,那么它不会从一开始就开始并再次完成所有操作,我该如何去结束循环?感谢任何和所有的帮助。

+1

我没有看到任何设置。我只在你的例子中看到列表。你确定你不会对[Python'set'类型](http://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset)感到困惑吗?您将'a_set'设置为*'list' *。 – 2013-04-24 20:12:29

回答

2

你正在寻找一个sliding window generator代替:

from itertools import islice 

def window(seq, n=2): 
    "Returns a sliding window (of width n) over data from the iterable" 
    " s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ...     " 
    it = iter(seq) 
    result = tuple(islice(it, n)) 
    if len(result) == n: 
     yield result  
    for elem in it: 
     result = result[1:] + (elem,) 
     yield result 

list(window(a_list, 6))  

这给:

>>> list(window(a_list, 6)) 
[('chicken', 'pizza', 'burger', 'beer', 'vodka', 'potato'), ('pizza', 'burger', 'beer', 'vodka', 'potato', 'fries'), ('burger', 'beer', 'vodka', 'potato', 'fries', 'mustache')] 

没有创建python sets在这里,你需要小心你的术语。

a_windows = [] 
index1 = 0 
index2 = 6 

while index2 <= len(a_list): 
    a_windows.append(a_list[index1:index2]) 
    index1 += 1 
    index2 += 1 

其工作原理:

具体地说,当第二指标达到列表的末尾,你不是测试

>>> a_windows 
[['chicken', 'pizza', 'burger', 'beer', 'vodka', 'potato'], ['pizza', 'burger', 'beer', 'vodka', 'potato', 'fries'], ['burger', 'beer', 'vodka', 'potato', 'fries', 'mustache']] 
1

或许,这将有助于

def get_set(li, phrase_len): 
    l = len(li) 
    for i in range(l): 
     if phrase_len <= l-i: 
      yield(li[i:i+phrase_len]) 

a_list=['chicken','pizza','burger','beer','vodka','potato','fries','mustache'] 
print list(get_set(a_list, 6)) 

运行这里的代码http://codebunk.com/bunk#-IsxjI9Up1AgOfi0nuCd

0

如果我正确理解你,你需要列表中六个项目的所有可能组合。 itertools.combinations应该很容易:

>>> import itertools 
>>> a_list=['chicken','pizza','burger','beer','vodka','potato','fries','mustache'] 
>>> a_set=set(itertools.combinations(a_list, 6)) 
>>> pprint(a_set) 
{('burger', 'beer', 'vodka', 'potato', 'fries', 'mustache'), 
('chicken', 'beer', 'vodka', 'potato', 'fries', 'mustache'), 
('chicken', 'burger', 'beer', 'potato', 'fries', 'mustache'), 
('chicken', 'burger', 'beer', 'vodka', 'fries', 'mustache'), 
('chicken', 'burger', 'beer', 'vodka', 'potato', 'fries'), 
('chicken', 'burger', 'beer', 'vodka', 'potato', 'mustache'), 
('chicken', 'burger', 'vodka', 'potato', 'fries', 'mustache'), 
('chicken', 'pizza', 'beer', 'potato', 'fries', 'mustache'), 
('chicken', 'pizza', 'beer', 'vodka', 'fries', 'mustache'), 
('chicken', 'pizza', 'beer', 'vodka', 'potato', 'fries'), 
('chicken', 'pizza', 'beer', 'vodka', 'potato', 'mustache'), 
('chicken', 'pizza', 'burger', 'beer', 'fries', 'mustache'), 
('chicken', 'pizza', 'burger', 'beer', 'potato', 'fries'), 
('chicken', 'pizza', 'burger', 'beer', 'potato', 'mustache'), 
('chicken', 'pizza', 'burger', 'beer', 'vodka', 'fries'), 
('chicken', 'pizza', 'burger', 'beer', 'vodka', 'mustache'), 
('chicken', 'pizza', 'burger', 'beer', 'vodka', 'potato'), 
('chicken', 'pizza', 'burger', 'potato', 'fries', 'mustache'), 
('chicken', 'pizza', 'burger', 'vodka', 'fries', 'mustache'), 
('chicken', 'pizza', 'burger', 'vodka', 'potato', 'fries'), 
('chicken', 'pizza', 'burger', 'vodka', 'potato', 'mustache'), 
('chicken', 'pizza', 'vodka', 'potato', 'fries', 'mustache'), 
('pizza', 'beer', 'vodka', 'potato', 'fries', 'mustache'), 
('pizza', 'burger', 'beer', 'potato', 'fries', 'mustache'), 
('pizza', 'burger', 'beer', 'vodka', 'fries', 'mustache'), 
('pizza', 'burger', 'beer', 'vodka', 'potato', 'fries'), 
('pizza', 'burger', 'beer', 'vodka', 'potato', 'mustache'), 
('pizza', 'burger', 'vodka', 'potato', 'fries', 'mustache')}