[英]How to swap even lesser elements with odd greater elements in a python list?
我有一个从 1 到 n 的元素列表,( range(1, n + 1)
)
我应该如何用偶数元素交换奇数更大的元素?
例如,如果我有一个包含元素[1,2,3]
的列表,则所需的输出将是[1,3,2]
因为奇数 3 大于偶数 2 。
例子2:
if list = [1,2,3,4,5]
所需的输出将是
[1,3,2,5,4]
这里 2 将与 3 交换,4 将与 5 交换但不与 3 交换,因为 3 小于 4。
一个简单的 for 循环,就地修改列表:
l = list(range(1,10))
for i, n in enumerate(l):
if i % 2 != 0 and i < len(l) - 1:
l[i] = l[i+1]
l[i+1] = n
在每个奇数索引处,元素与其后继者交换位置。
您可以使用偶数/奇数的列表切片,压缩它们并从中创建解决方案列表:
def interleave(n):
k = list(range(1, n))
k[:] = k[:1]+[y for x in zip(k[2::2], k[1::2])
for y in x] + (k[-1:] if len(k)%2 == 0 else [])
return k
print(interleave(20))
print(interleave(21))
输出:
[1, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18]
[1, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18, 20]
解释:
[x for y in sequence for y in x]
的嵌套列表理解重新组合它们,其中y
是通过压缩两个切片产生的元组进一步阅读:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.