-2

我正在寻找一个不错的 pythonian 解决方案来从 Python 3 的列表中读取两个元素。我需要写什么???在以下代码中:

it = [1,2,3,4,5,6]
for x, y in ??? :
    print (x, y)

所需的输出将是:

1 2
3 4
5 6

也可以使用索引 for 循环来解决它。但这也很丑(恕我直言)

4

5 回答 5

3

使用zip(*[iter(it)] * 2),如this answer所示。

it = [1,2,3,4,5,6]
for x, y in zip(*[iter(it)] * 2):
    print(x, y)
于 2018-06-11T13:27:52.780 回答
2

另一个没有 zip 的简单方法是:

i = 0
while i < len(it)-1:
  print(it[i], it[i+1])
  i += 2
于 2018-06-11T13:35:35.633 回答
2

另一个便宜的选择,使用索引。你可能不喜欢它们,但它们很快。

it = [1,2,3,4,5,6]
for x in range(0, len(it)-1, 2):
    print(it[x], it[x+1])
于 2018-06-11T13:42:14.717 回答
1

这是另一种适用的方法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)]
于 2018-06-11T13:31:06.810 回答
0

得到这个为你的情况工作:

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] 来获得偶数。使用切片功能做到这一点,这是非常有用的链接

然后我将它们压缩在一起以匹配第一个、第二个、第三个元素等链接

然后我使用列表推导来创建每个集合的列表。问题是它们是集合而不是上面的文本。为了解决这个问题,我将我的设置更改为 string str()

现在各个集合已变成字符串,您可以使用' '.

您仍然有一组 3 个,但您可以使用 print(*[list here],sep='\n')链接打印每一行

学习了一些新技巧,希望对您有所帮助!

于 2018-06-11T13:49:42.993 回答