我正在使用string.split(':')
函数,以便我的列表包含firstname:lastname对(例如["John", "Doe", "Alex", "Jacobson" ...]
我知道如何使用一个基本的for循环,每次我将索引增加两个(并与列表的长度进行比较),但我想以更具体的Python方式处理它。
我可以采用哪种更清晰的循环结构,这可以让我考虑前两个指数,然后是接下来的两个,等等?
答案 0 :(得分: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')
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分: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']