2015-10-26 39 views
-1

我使用的是string.split(':')功能,使我的清單包括姓名的:名字對(例如["John", "Doe", "Alex", "Jacobson" ...]乾淨的方式來遍歷在Python中成對的列表?

我知道如何使用一個基本的for循環,我將有兩名每次遞增指數(並比較長),但我想以更具體Python的方式處理它

是否有任何更清晰的循環構造,我可以採取哪些讓我考慮前兩個指標,然後接下來的兩個, etc?

+0

https://docs.python.org/2/library/functions.html#zip – asf107

+0

的可能的複製【什麼是最「Python化」的方式來遍歷一個列表chunks?](http://stackoverflow.com/questions/434287/what-is-the-most-pythonic-way-to-iterate-over-a-list-in-chunks)和[另一種方法來拆分列表成組的n](http://stackoverflow.com/questions/1624883/alternative-way-to-split-a-list-into-groups-of-n/1625023)和[你如何將列表分成均勻Python中的大小塊](http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python) – TessellatingHeckler

回答

1
for first,last in zip(string[::2],string[1::2]): 

應該工作

編輯:對不起,我並不是很簡潔。

zip所做的是創建一個允許for循環中有兩個變量的對象。在這種情況下,我們創建一個zip對象,其中包含從索引0(string[::2])開始的所有其他對象的切片列表以及從索引1(string[1::2')開始的每個其他對象的切片列表。然後我們可以使用兩個迭代器(first,last)遍歷該zip列表。

即。

>>> l1 = [1,2,3,4] 
>>> l2= [5,6,7,8] 
>>> zip(l1,l2) 
<zip object at 0x02241030> 
>>> for l,k in zip(l1,l2): print(l+k) 
... 
6 
8 
10 
12 
>>> for l,k in zip(l1,l2): print (l,k) 
... 
1 5 
2 6 
3 7 
4 8 
+0

究竟發生了什麼? – AlwaysQuestioning

+0

爲什麼要這樣工作?如果你必須說(並且只是說)「這應該起作用」,這可能是一個不好的答案。自我解釋 –

+0

我道歉,檢查編輯 –

1
>>> import itertools 
>>> L = ["John", "Doe", "Alex", "Jacobson"] 
>>> for fname, lname in zip(*itertools.repeat(iter(L), 2)): print(fname, lname) 
... 
John Doe 
Alex Jacobson 
0

您可以使用拼接,即 假設所有的名字都在X

fname = x[::2] 
lname = x[1::2] 
y = [] 
for a,b in zip(fname,lname): 
    y.append({'fname':a, 
       'lname':b,}) 

現在你可以很容易地通過迭代,

for i in y: 
    print i['fname'], i['lname'] 
3

呼叫iter上列表和zip

l = ["John", "Doe", "Alex", "Jacobson"] 

it = iter(l) 

for f,l in zip(it, it): 
    print(f,l) 

John Doe 
Alex Jacobson 

zip(it,it)每次都從我們的迭代器中消耗兩個元素,直到迭代器耗盡,所以我們最終得到配對的姓和名。這是有點相當於:

In [86]: l = ["John", "Doe", "Alex", "Jacobson"] 

In [87]: it = iter(l) 

In [88]: f,l = next(it),next(it) 

In [89]: f,l 
Out[89]: ('John', 'Doe') 

In [91]: f,l 
Out[91]: ('Alex', 'Jacobson') 
+0

哪些可以推廣到''n'作爲['zip(* [iter(xs)] * n)'](http://stackoverflow.com/a/16758257/ 478656) – TessellatingHeckler