Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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,在这个程序中,我试图通过从列表中随机选择两个项目并交换它们来洗牌列表,然后重复这个过程数次 我遇到的问题是,我不知道如何交换项目并打印无序列表 例如,如果我的两个随机值是a和b,如果我只是把: a = b b = a 然后,这会将a的值更改为b,但当它尝试将b更改为a时,不会发生任何更改,因为a已更改为b 我认为这唯一可行的方法是同时交换它们,但我不知道有什么函数/方法可以交换它们 如果a,b是列表L中的项目,在我使用 print L 它应该打印修改过的版本吗?我之所以这么问,是因为从我的尝

在这个程序中,我试图通过从列表中随机选择两个项目并交换它们来洗牌列表,然后重复这个过程数次

我遇到的问题是,我不知道如何交换项目并打印无序列表

例如,如果我的两个随机值是a和b,如果我只是把:

a = b
b = a
然后,这会将a的值更改为b,但当它尝试将b更改为a时,不会发生任何更改,因为a已更改为b

我认为这唯一可行的方法是同时交换它们,但我不知道有什么函数/方法可以交换它们

如果a,b是列表L中的项目,在我使用

print L
它应该打印修改过的版本吗?我之所以这么问,是因为从我的尝试来看,它并没有这样做


注意:我正在尝试通过交换逐步洗牌此列表,而不是使用从random导入的洗牌函数。

在Python中,您可以这样交换两个变量:

a, b = b, a
这称为多重分配,您可以找到有关它的更多信息

在其他语言中,这通常通过分配临时变量来完成:

tmp = a
a = b
b = tmp
t    = x[i]
x[i] = x[j]
x[j] = t
temp = a
a = b
b = temp
Python不是很棒吗?

random.shuffle函数也使用交换。值得一看的是:

观察最后一行如何使用执行交换

作为打包和解包的替代方法,交换变量的传统方法是使用临时变量:

tmp = a
a = b
b = tmp
t    = x[i]
x[i] = x[j]
x[j] = t
temp = a
a = b
b = temp

使用临时变量:

tmp = a
a = b
b = tmp
t    = x[i]
x[i] = x[j]
x[j] = t
temp = a
a = b
b = temp

使用临时变量解决第一个问题:

temp = a
a = b
b = temp
在Python中,您还可以执行以下操作:

a, b = b, a
我怀疑你的第二个问题是因为你在改变你从清单中得到的东西,而不是改变清单。试试这个:

i, j = # two indexes to swap in the list
L[i], L[j] = L[j], L[i]

仅仅交换物品是不好的

不要忘记,如果你有n个项目,那么就有n个!安排。如果您的随机数为32位,则有2^32个数字


很难洗牌一副32位数字为52的牌!比2^32大得多

当我还是个孩子时,交换回来的经典方法是使用一个临时变量:tmp=a,a=b,b=tmp-但是python比当时的BASIC更聪明![太蹩脚了,不值得回答]