2013-04-24 120 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')}