Python 3.x 如何在不使用return的情况下编写更改原始整数列表的函数?
假设我们有一个整数列表: 列表=[6,4,1,4,4,4,4,4,4,2,1] 我现在编写了一个函数,它返回另一个列表,其中包含上面列表中的所有整数,不重复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无重复: 新列表=[
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都将给出相同的结果。我将补充答案