关于 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 的奖励积分:如何修改此代码以也交换字符串?现在,我只能使用整数来使用这个函数,我很好奇如何才能使它同时适用于 int
和 str
对象?
非常感谢您给我指明正确方向的任何见解或建议!有时,这里每个人的帮助都是无价的,感谢您的阅读和帮助!
最佳答案
这是一种基于切片分配的更短、可能更快的方法:
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) % 2
将 end
设置为小于或等于 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/