Python 3.x 如何在不使用return的情况下编写更改原始整数列表的函数?

Python 3.x 如何在不使用return的情况下编写更改原始整数列表的函数?,python-3.x,list,function,integer,return,Python 3.x,List,Function,Integer,Return,假设我们有一个整数列表: 列表=[6,4,1,4,4,4,4,4,4,2,1] 我现在编写了一个函数,它返回另一个列表,其中包含上面列表中的所有整数,不重复 def no_repeats(s): new_list = [] for number in s: if new_list.count(number) < 1: new_list.append(number) return(new_list) def无重复: 新列表=[

假设我们有一个整数列表:

列表=[6,4,1,4,4,4,4,4,4,2,1]

我现在编写了一个函数,它返回另一个列表,其中包含上面列表中的所有整数,不重复

def no_repeats(s):
    new_list = []
    for number in s:
        if new_list.count(number) < 1:
            new_list.append(number)
    return(new_list)
def无重复:
新列表=[]
对于s中的数字:
如果新列表计数(数字)<1:
新列表。追加(编号)
返回(新列表)
新的_列表返回[6,4,1,2],这很好!我的问题是,我现在将如何编写两个类似的函数:

一个函数clean(s),它不会像上面的函数那样返回新列表,而是通过删除所有重复的数字来更改原始列表。因此,结果必须相同,函数不得包含“return”或创建新列表。它只能清理原始列表

一个函数double(s),它再次更改原始列表(不返回新列表!),但这次是通过将原始列表中的每个数字加倍。因此,double(列表)应将上述原始列表更改为:

[6,6,4,4,1,1,4,4,4,4,4,4,4,4,4,4,2,2,1,1]

谢谢你的帮助

>>> def clean(s):
...     s[:] = [s[i] for i in range(len(s)) if s[i] not in s[:i]]
... 
>>> st = [1, 2, 3, 2, 1]

>>> clean(st)
>>> st
[1, 2, 3]

>>> def double(s):
...     s[:] = [s[i//3] for i in range(3*len(s)) if i % 3]
... 
>>> st = [1, 2, 3, 2, 1]
>>> double(st)
>>> st
[1, 1, 2, 2, 3, 3, 2, 2, 1, 1]
这两种方法都不是特别有效,也不是特别通灵,但确实解决了OP问题

双def(s): ... s[:]=[s[i//2]表示范围内的i(2*len(s))]


也可以做到这一点,在不保留顺序的情况下移除重复项,只需稍微减少观察次数

def no_repeats(L):
    L[:] = set(L)
有(保留顺序、支持非散列项、支持不定义总顺序的项),例如,要保留顺序:

from collections import OrderedDict

def no_repeats(L):
    L[:] = OrderedDict.fromkeys(L)
要将每个元素的值原地翻倍,请执行以下操作:

def double(L):
    for i in range(len(L)):
        L[i] *= 2
要复制每个元素,请执行以下操作:

def duplicate_elements(L):
    L[:] = [x for x in L for _ in range(2)]

这个答案在很大程度上取决于实现解决方案所用的特定语言。请编辑相关标签。抱歉,更正。语言是Python3+。这是一个非常有趣的代码!非常感谢你。你能详细说明一下你在第二个函数中做了什么吗?我想知道你做了什么。:)作为一种体验,我们只需要“慢慢地”浏览一下列表。甚至可以更进一步。无论i是4还是5,i//2都将给出相同的结果。我将补充答案