gpt4 book ai didi

python - 在 Python 中给定一个奇数长度的值列表,我如何交换列表中除最终值之外的所有值?

转载 作者:太空狗 更新时间:2023-10-30 01:43:25 27 4
gpt4 key购买 nike

关于 Python 2.7.12(免责声明:我知道 Python2 正在逐步淘汰到 Python3,但我正在学习的类(class)从这里开始,也许是为了理解旧代码库):

我有一个整数列表,我想用它们的相邻值交换每个整数。到目前为止,这对于包含的整数个数为偶数的列表非常有效,但是当列表长度为奇数时,简单地交换每个值并不容易,因为整数个数是不均匀的。

给出以下代码示例,我如何交换列表中除 final 值之外的所有值?

arr = [1, 2, 3, 4, 5]

def swapListPairs(arr):
for idx, val in enumerate(arr):
if len(arr) % 2 == 0:
arr[idx], arr[val] = arr[val], arr[idx] # traditional swap using evaluation order
else:
arr[0], arr[1] = arr[1], arr[0] # this line is not the solution but where I know I need some conditions to swap all list values other than len(arr)-1, but am not sure how to do this?
return arr

print swapListPairs(arr)

最终 Pythonic Master 的奖励积分:如何修改此代码以也交换字符串?现在,我只能使用整数来使用这个函数,我很好奇如何才能使它同时适用于 intstr 对象?

非常感谢您给我指明正确方向的任何见解或建议!有时,这里每个人的帮助都是无价的,感谢您的阅读和帮助!

最佳答案

这是一种基于切片分配的更短、可能更快的方法:

def swap_adjacent_elements(l):
end = len(l) - len(l) % 2
l[:end:2], l[1:end:2] = l[1:end:2], l[:end:2]

切片分配选择 l 中所有偶数索引 (l[:end:2]) 或所有奇数索引 (l[1: end:2]) 直到并排除索引 end,然后使用您已经用于交换切片的相同类型的交换技术。

end = len(l) - len(l) % 2 选择停止的索引。我们通过减去 len(l) % 2end 设置为小于或等于 len(l) 的最接近的偶数,当len(l) 除以 2。

或者,我们可以使用按位运算完成 end = len(l) & ~1。这将构造一个整数用作掩码 (~1),第 1 位为 0,其他位置为 1,然后将掩码(使用 &)应用于将 len(l) 的第 1 位设置为 0 以产生 end

关于python - 在 Python 中给定一个奇数长度的值列表,我如何交换列表中除最终值之外的所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38840017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com