2013-12-22 31 views
0

我有一個列表:如何從列表中獲取索引條目?

a=['a1','a2','a3','a4'] 

,並希望得到按照以下順序相鄰的列表條目,如

a1 a2 
a2 a3 
a3 a4 

我嘗試以下,但它不工作。

for i,b in enumerate(a): 
    w1=i[i] 
    w2=i[i+1] 
    print w1,w2 

有什麼建議嗎?

+0

這不是重複的,因爲另一個問題在更復雜的場景中要求迭代器。這個問題允許簡單的解決方案'窗口在zip(a,a [1:])''。 – Chronial

+0

還有這樣的:[Python循環:慣用比較列表中的連續項](http://stackoverflow.com/q/2152640)和[移動窗口中的Python拆分字符串](http://stackoverflow.com/q/7636004)更多。 –

+0

感謝您的聯繫。 – Ibe

回答

2

不同的替代方案:

遍歷索引高達長度減去1:

for i in xrange(len(a) - 1): 
    print a[i:i+2] 

或壓縮在一起列表和列表的過去的第一個索引片:

for window in zip(a, a[1:]): 
    print window 

或拉鍊一起列表加在列表上進行迭代的迭代,先進的一個步驟:

a_iter = iter(a) 
next(a_iter) 
for window in zip(a, a_iter): 
    print window 
+0

謝謝。它按我的需要工作。 – Ibe

+0

一面Q如果不介意。我們可以使用元組和列表一起使用,例如: '對於i,j in zip((a,a [1:]),l):' – Ibe

+1

否,但是您可以*嵌套它們:'zip(zip ,a [1:]),l)'。 –

0

這裏是一個通用的解決方案

def get_entries(a, size): 
    return [a[i:i+size] for i in range(len(a) - (size - 1))] 

a = ['a1','a2','a3','a4'] 
for i in range(1, 5): 
    print get_entries(a, i) 

輸出

[['a1'], ['a2'], ['a3'], ['a4']] 
[['a1', 'a2'], ['a2', 'a3'], ['a3', 'a4']] 
[['a1', 'a2', 'a3'], ['a2', 'a3', 'a4']] 
[['a1', 'a2', 'a3', 'a4']] 
0
[(a[i],a[i+1]) for i in range(0, len(a) - 1)] 

代碼包含符號

i[i] 

可能是一個錯字,這將不執行,因爲在你的代碼中,我是一個整數。稍作修改會使原始代碼有效:

for i in range(len(a)-1): 
    w1=a[i] 
    w2=a[i+1] 
    print w1,w2 
+0

你幫助OP解決問題還是狙擊? –

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 –

+0

??我測試了它,它工作正常。在[2]中:[(a [i],a [i + 1])in range in(0,len(a) - 1)] Out [2]:[('a1','a2') ,('a2','a3'),('a3','a4')] –