当这些整数可能重复时,如何交换列表中的整数
How do you swap integers in a list when those integers may repeat
我的列表包含无序的随机整数。我想在保持列表顺序不变的情况下交换元素。
ran=[1,1,2,1]
我想交换 1 和 2:
swap(ran,1,2)
output:
2212
或
ran=[3,3,1,2]
swap(ran,1,3)
output:
1132
我尝试了交换函数,但我知道我的迭代逻辑不是很好。
def swap(c,x,y):
arr=[]
for i, v in enumerate(c):
if v==x or v==y:
for j,v2 in enumerate(c):
if v2==y or v2==x:
arr[i], arr[j] = arr[j], arr[i]
这只会更改其中一个值。
问题是不知道哪个索引已更改。
您提供的示例表明您想要的过程实际上并不是单个元素的 "swap",而更像是双向 "search and replace"。如果这是需要的,一个更简单的循环就可以了:
def swap(c, x, y):
for i, v in enumerate(c):
if v == x:
c[i] = y
elif v == y:
c[i] = x
使用字典对交换逻辑进行编码并使用 get(e, e)
对其进行索引。任何不在字典中的不可交换元素将被单独保留。
>>> def swap(lst, x, y):
... swaps = {x: y, y: x}
... return [swaps.get(e, e) for e in lst]
...
>>> swap([1, 1, 2, 1], 1, 2)
[2, 2, 1, 2]
您可以通过让调用者传入字典来指定交换来概括这一点。这是 .
我想你可以使用这样的东西:
def swap(lst,x,y):
ret = lst
for e in range(0,length(lst)):
if x == lst[e]:
ret[e] = y
if y == lst[e]:
ret[e] = x
return ret
我的列表包含无序的随机整数。我想在保持列表顺序不变的情况下交换元素。
ran=[1,1,2,1]
我想交换 1 和 2:
swap(ran,1,2)
output:
2212
或
ran=[3,3,1,2]
swap(ran,1,3)
output:
1132
我尝试了交换函数,但我知道我的迭代逻辑不是很好。
def swap(c,x,y):
arr=[]
for i, v in enumerate(c):
if v==x or v==y:
for j,v2 in enumerate(c):
if v2==y or v2==x:
arr[i], arr[j] = arr[j], arr[i]
这只会更改其中一个值。
问题是不知道哪个索引已更改。
您提供的示例表明您想要的过程实际上并不是单个元素的 "swap",而更像是双向 "search and replace"。如果这是需要的,一个更简单的循环就可以了:
def swap(c, x, y):
for i, v in enumerate(c):
if v == x:
c[i] = y
elif v == y:
c[i] = x
使用字典对交换逻辑进行编码并使用 get(e, e)
对其进行索引。任何不在字典中的不可交换元素将被单独保留。
>>> def swap(lst, x, y):
... swaps = {x: y, y: x}
... return [swaps.get(e, e) for e in lst]
...
>>> swap([1, 1, 2, 1], 1, 2)
[2, 2, 1, 2]
您可以通过让调用者传入字典来指定交换来概括这一点。这是
我想你可以使用这样的东西:
def swap(lst,x,y):
ret = lst
for e in range(0,length(lst)):
if x == lst[e]:
ret[e] = y
if y == lst[e]:
ret[e] = x
return ret