我有一个带有值的列表A
[43.4543, 23.45343, 76.55665, 33.4345, 5]
我需要按以下方式压缩它,
[(43.4543,23.45343,5),(76.55665,33.4345,5)]
有人可以指导我解决这个问题吗?
答案 0 :(得分:2)
zip
将返回一个列表,其长度等于最短输入序列的长度。由于最后一个(A[-1:]
)只有1个元素,因此不能使用zip。尝试下面不同的东西。
a = [43.4543, 23.45343, 76.55665, 33.4345, 5]
map(lambda x: x + (a[-1],), zip(a[::2], a[1::2]))
答案 1 :(得分:2)
您可以zip
使用itertools.repeat
:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#scrolltohere" id="bike">Bikes</a>
<div class="eshop-section section" id="scrolltohere">
<h2 style="font-family: 'Lato'; font-size: 40px;">
        Bikes
</h2>
</div>
答案 2 :(得分:1)
我不确定你为什么要在这里使用zip
。对于给定的数据,您可以像这样组装所需的输出:
p = [a[:2] + a[-1:], a[2:]]
或者如果列表项必须是元组:
p = [tuple(u) for u in (a[:2] + a[-1:], a[2:])]
但您可以使用zip
和itertools.cycle
from itertools import cycle
a = [43.4543, 23.45343, 76.55665, 33.4345, 5]
p = zip(a[::2], a[1::2], cycle(a[-1:]))
print(list(p))
<强>输出强>
[(43.4543, 23.45343, 5), (76.55665, 33.4345, 5)]
这适用于奇数长度的任何a
。
而不是使用itertools.cycle
,您可以使用itertools.repeat
,就像在niemmi的回答中一样。
另一种选择是使用源列表的迭代器进行压缩:
from itertools import repeat
a = range(11)
head, tail = iter(a), a[-1]
p = zip(head, head, repeat(tail))
print(list(p))
<强>输出强>
[(0, 1, 10), (2, 3, 10), (4, 5, 10), (6, 7, 10), (8, 9, 10)]
答案 3 :(得分:0)
P = zip(A[::2], A[1::2], A[-1:]*2)
应该给出预期的输出