Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当整数可能重复时,如何交换列表中的整数_Python_List_Swap - Fatal编程技术网

Python 当整数可能重复时,如何交换列表中的整数

Python 当整数可能重复时,如何交换列表中的整数,python,list,swap,Python,List,Swap,我的列表包含无顺序的随机整数。我想交换元素,同时保持列表的顺序不变 ran=[1,1,2,1] 我想换成1和2: swap(ran,1,2) output: 2212 或 我尝试了一个交换函数,但我知道我的迭代逻辑不是很好 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

我的列表包含无顺序的随机整数。我想交换元素,同时保持列表的顺序不变

ran=[1,1,2,1]
我想换成1和2:

swap(ran,1,2)
output:
2212

我尝试了一个交换函数,但我知道我的迭代逻辑不是很好

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]
这只会更改其中一个值


问题在于不知道哪个索引已经更改。

您给出的示例表明,您想要的过程实际上不是单个元素的交换,而是双向搜索和替换。如果这是需要的,那么一个简单得多的循环就可以工作了:

def swapc,x,y: 对于c中的i,v: 如果v==x: c[i]=y elif v==y: c[i]=x
使用dict对交换逻辑进行编码,并使用gete,e索引到其中。任何不在dict中的不可交换元素都将被单独保留

>>> 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

看起来您实际上并没有交换特定的元素;您只是将所有的X更改为Y,反之亦然。如果y不存在会发生什么?e、 g.交换[1,1,1],1,2是否应该产生[2,2,2]?交换相同的值是否有效?也就是说,如果交换方法建议1对1交换,可以吗?或者每个数字都必须映射到其他数字吗?这个几乎完全相同的问题是在几个小时前提出的。是否正在进行竞争?这种简单性使这种反应显得非常突出。另外,它在内存使用方面非常有效-不创建新列表。我也喜欢它,它确实节省了dict分配,但是如果您想扩展/推广到任意大数量的交换,写一个有几十个选项的巨型if-else并不是什么有趣的事。好吧,当我想要一个搜索和替换的时候,我好像在拼命寻找交换。非常感谢cschatz和其他人。
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