作为一个编程初学者,我尝试用 Python 来做这做那。我想要一个简单的函数,它接受一个列表作为其参数,并返回另一个列表,该列表只是原始列表旋转一次(因此rotate([1, 2, 3])将返回[2, 3, 1]),同时保持原始列表不变。
我知道这个
def rotate(list):
list.append(list[0])
list.remove(list[0])
Run Code Online (Sandbox Code Playgroud)
会就地更改列表(并返回 None)。
但这个
def rotate_2(list):
temp = list
temp.append(temp[0])
temp.remove(temp[0])
return temp
Run Code Online (Sandbox Code Playgroud)
还将更改原始列表(同时返回所需的列表)。
还有第三个
def rotate_3(list):
temp = [x for x in list]
temp.append(temp[0])
temp.remove(temp[0])
return temp
Run Code Online (Sandbox Code Playgroud)
给出了所需的结果,即返回一个新列表,同时保持原始列表不变。
我无法理解 的行为rotate_2。list当函数只是在做某事时为什么会改变temp?它给我一种感觉,好像list是temp被“联系”在一起的temp = list。还有为什么rotate_3可以?抱歉,如果我的英语很奇怪,它不是我的母语(与 Python 不同)。
在rotate_2、temp和 中list引用相同的列表,因此当您更改其中一个时,它们都会更改。
在 中rotate_3,您正在制作副本。制作副本的一种更惯用的方法是:
temp = list[:]
Run Code Online (Sandbox Code Playgroud)
我个人会这样编写这个函数:
def rotate_4(l):
return l[1:] + [l[0]]
Run Code Online (Sandbox Code Playgroud)
请注意,我已重命名list为l“since listis abuilt-in name”。
| 归档时间: |
|
| 查看次数: |
392 次 |
| 最近记录: |