在可用时形成对的可读方式
Readable way to form pairs while available
我正在尝试将列表变成对,但尽可能长(即我的列表可能是奇数,在这种情况下我想忽略最后一个元素)。
例如我的输入是 x = [0, 1, 2, 3, 4]
,我想把它变成 [(0, 1), (2, 3)]
。同样,x = [0, 1, 2, 3, 4, 5]
应该变成 [(0, 1), (2, 3), (4, 5)]
.
我目前正在做的是[(x[i], x[i+1]) for i in range(0, len(x), 2)]
。这打破了,因为 range(0, len(x), 2)
仍然包括 x[-1]
如果 len(x)
是奇数。请注意,[(l, r) for l, r in ...]
形式的内容也更可取,而不是必须使用索引 fiddle。
奖励积分:这里有一些更多的背景信息。当然,我并没有完全忽略奇数序列的最后一个元素。我正在对每一对应用一个函数,但我不想将此函数 H
应用于单例元素。目前,我正在执行以下操作:
next_layer = [H(layer[i], layer[i+1]) for i in range(0, len(layer), 2)]
if len(layer) & 1: # if there is a lone node left on this layer
next_layer.append(layer[-1])
一个更优雅的解决方案也将把它合并到上面。
使用 zip
This function returns a list of tuples, where the i-th tuple contains the i-th element from each of the argument sequences or iterables. The returned list is truncated in length to the length of the shortest argument sequence.
>>> a = [1, 2, 3, 4, 5]
>>> b = [0, 1, 2, 3, 4, 5]
>>> zip(a[::2], a[1::2])
[(1, 2), (3, 4)]
>>> zip(b[::2], b[1::2])
[(0, 1), (2, 3), (4, 5)]
我正在尝试将列表变成对,但尽可能长(即我的列表可能是奇数,在这种情况下我想忽略最后一个元素)。
例如我的输入是 x = [0, 1, 2, 3, 4]
,我想把它变成 [(0, 1), (2, 3)]
。同样,x = [0, 1, 2, 3, 4, 5]
应该变成 [(0, 1), (2, 3), (4, 5)]
.
我目前正在做的是[(x[i], x[i+1]) for i in range(0, len(x), 2)]
。这打破了,因为 range(0, len(x), 2)
仍然包括 x[-1]
如果 len(x)
是奇数。请注意,[(l, r) for l, r in ...]
形式的内容也更可取,而不是必须使用索引 fiddle。
奖励积分:这里有一些更多的背景信息。当然,我并没有完全忽略奇数序列的最后一个元素。我正在对每一对应用一个函数,但我不想将此函数 H
应用于单例元素。目前,我正在执行以下操作:
next_layer = [H(layer[i], layer[i+1]) for i in range(0, len(layer), 2)]
if len(layer) & 1: # if there is a lone node left on this layer
next_layer.append(layer[-1])
一个更优雅的解决方案也将把它合并到上面。
使用 zip
This function returns a list of tuples, where the i-th tuple contains the i-th element from each of the argument sequences or iterables. The returned list is truncated in length to the length of the shortest argument sequence.
>>> a = [1, 2, 3, 4, 5]
>>> b = [0, 1, 2, 3, 4, 5]
>>> zip(a[::2], a[1::2])
[(1, 2), (3, 4)]
>>> zip(b[::2], b[1::2])
[(0, 1), (2, 3), (4, 5)]