我有一个列表,其中包含相等数量的奇数和偶数。目标是修改列表以在奇数索引处具有奇数整数,在偶数索引处具有偶数整数。
这是我的方法:
我找出偶数索引和奇数索引处的数字。然后找出偶数索引处的奇数和奇数索引处的偶数。最后交换错位的数字。
x = [3, 2, 5, 6, 4, 7, 8, 9, 10, 11]
even_pos = []
odd_pos = []
for i in range(len(x)):
if x[i] % 2 == 0:
even_pos.append(i)
else:
odd_pos.append(i)
even_pos_with_odd = []
odd_pos_with_even = []
for j in range(len(even_pos)):
if even_pos[j] % 2 != 0:
even_pos_with_odd.append(j)
if odd_pos[j] % 2 == 0:
odd_pos_with_even.append(j)
for n in range(len(even_pos_with_odd)):
temp = x[odd_pos[odd_pos_with_even[n]]]
x[odd_pos[odd_pos_with_even[n]]] = x[even_pos[even_pos_with_odd[n]]]
x[even_pos[even_pos_with_odd[n]]] = temp
虽然它有效,但我对解决方案不是很满意。有没有更有效的解决方案来解决我的问题?我的目标是使 x[]
像 [2, 3, 6, 5, 4, 7, 8, 9, 10, 11]
可能以相同的奇偶格式排序。
原文由 juggernaut 发布,翻译遵循 CC BY-SA 4.0 许可协议
创建列表的 _副本_(仅用于创建等长的新列表),然后使用两个计数器跟踪将偶数和奇数插入新列表的位置,每次将索引递增 2:
这比尝试就地交换所有内容要简单得多。
演示:
对于已排序的输出(奇数和偶数独立排序),只需对输入进行排序: