Python 3:成对遍历列表
Python 3: pairwise iterating through list
我正在寻找一个很好的 pythonian 解决方案来从 Python 中的列表中读取两个元素 3. 我需要写什么???在以下代码中:
it = [1,2,3,4,5,6]
for x, y in ??? :
print (x, y)
所需的输出将是:
1 2
3 4
5 6
也可以用索引for循环来解决。但这也很丑陋(恕我直言)
使用zip(*[iter(it)] * 2)
,见this answer。
it = [1,2,3,4,5,6]
for x, y in zip(*[iter(it)] * 2):
print(x, y)
这是另一种适用于 Python3
的方法:
def pair(a):
# Or simply:
# return zip(a[::2], a[1::2])
for k, v in zip(a[::2], a[1::2]):
yield k, v
a = [1,2,3,4,5,6]
final = list(pair(a))
print(final)
输出:
[(1, 2), (3, 4), (5, 6)]
另一种不用 zip 的简单方法是:
i = 0
while i < len(it)-1:
print(it[i], it[i+1])
i += 2
另一个便宜的选择,使用索引。你可能不喜欢它们,但它们速度很快。
it = [1,2,3,4,5,6]
for x in range(0, len(it)-1, 2):
print(it[x], it[x+1])
得到这个适合你的案例:
l = [1,2,3,4,5,6]
print(*[' '.join([str(a) for a in x]) for x in zip(l[::2],l[1:][::2])],sep='\n')
首先我必须使用 l[::2] 创建列表中的奇数,然后 l[1:][::2] 得到偶数。是不是用了切片函数,这个函数很有用link
然后我将它们压缩在一起以匹配第 1、第 2、第 3 个元素等 link
然后我使用列表理解来创建每个集合的列表。问题是它们是集合而不是上面的文本。为了解决这个问题,我将我的集合更改为字符串 str()
。
现在单个集合已经变成字符串,您可以使用 ' '
加入。
你仍然有一组 3,但你可以打印每一行 print(*[list here],sep='\n') link
学习了一些新技巧,希望对您有所帮助!
我正在寻找一个很好的 pythonian 解决方案来从 Python 中的列表中读取两个元素 3. 我需要写什么???在以下代码中:
it = [1,2,3,4,5,6]
for x, y in ??? :
print (x, y)
所需的输出将是:
1 2
3 4
5 6
也可以用索引for循环来解决。但这也很丑陋(恕我直言)
使用zip(*[iter(it)] * 2)
,见this answer。
it = [1,2,3,4,5,6]
for x, y in zip(*[iter(it)] * 2):
print(x, y)
这是另一种适用于 Python3
的方法:
def pair(a):
# Or simply:
# return zip(a[::2], a[1::2])
for k, v in zip(a[::2], a[1::2]):
yield k, v
a = [1,2,3,4,5,6]
final = list(pair(a))
print(final)
输出:
[(1, 2), (3, 4), (5, 6)]
另一种不用 zip 的简单方法是:
i = 0
while i < len(it)-1:
print(it[i], it[i+1])
i += 2
另一个便宜的选择,使用索引。你可能不喜欢它们,但它们速度很快。
it = [1,2,3,4,5,6]
for x in range(0, len(it)-1, 2):
print(it[x], it[x+1])
得到这个适合你的案例:
l = [1,2,3,4,5,6]
print(*[' '.join([str(a) for a in x]) for x in zip(l[::2],l[1:][::2])],sep='\n')
首先我必须使用 l[::2] 创建列表中的奇数,然后 l[1:][::2] 得到偶数。是不是用了切片函数,这个函数很有用link
然后我将它们压缩在一起以匹配第 1、第 2、第 3 个元素等 link
然后我使用列表理解来创建每个集合的列表。问题是它们是集合而不是上面的文本。为了解决这个问题,我将我的集合更改为字符串 str()
。
现在单个集合已经变成字符串,您可以使用 ' '
加入。
你仍然有一组 3,但你可以打印每一行 print(*[list here],sep='\n') link
学习了一些新技巧,希望对您有所帮助!