替换列表中的每个元素

时间:2018-11-29 19:53:07

标签: python python-3.x function

如何用新的数字替换列表的每个元素,新的数字等于其自身与我使用函数提供的数字的乘积。我正在通过定义新列表D来实现预期的目标。

D=[]
S= [1,2,3,4]

def num(x):
    for i in S:
        D.append(i*x)
    return D

num(2)

在上面的示例中,D的输出为[2, 4, 6, 8],而S保持不变。我希望将S更改为[2, 4, 6, 8]

3 个答案:

答案 0 :(得分:0)

您可以按如下方法覆盖现有值,而不是将值附加到新列表中:

S = [1,2,3,4]

def num(x):
    for i in range(0, len(S)):
        s[i] *= x

答案 1 :(得分:0)

您有很多选择可以做到这一点。您可以直接操纵S或重新分配它:

n->child[29]=new avail;

一个更合理的版本:

def num(x):
    global S
    for index, value in enumerate(S):
        S[index] = value * x

def num(x)
    inner = []
    for i in S:
        inner.append(i*x)
    return inner
S = num(2)

现在很重要的部分,为什么这很理智?好吧,因为python中的列表不是一成不变的,所以您必须小心如何进行更改。就您而言,制作依赖于函数外部变量值的函数是有风险的。如果您总是想要第一个列表,并且在一个函数中对其进行更改(变异),则会遇到很多问题。如果您确实想更改原始列表,那很好,但是仍然可以通过列表理解(列出的最后一个选项)实现相同的目的。

答案 2 :(得分:0)

您可能还应该将列表放入函数中。然后更改其元素,并(可选)将其返回给ast:

S = [i*2 for i in S]

输出:

def num(data,multi):
    """Multiplies each element of data (a list of ints) by multi.
    The original list is modified and returned as well for chaining."""
    # data[:] = [d*multi for d in data]  # inplace reassignment list comp
    # or
    for i,d in enumerate(data[:]): # this iterates a _copy_ of data, do not modify a list
        data[i]=d*multi            # that you currently iterate over - it is possible here
                                   # but often it is a bad idea if you add/remove things
    return data

S= [1,2,3,4]
num(S,2)

print(S)

SO上有几个骗子:

其中一些用于python2,其中[2,4,6,8] 仍返回map-您可以查找它们以获取更多选项。

还返回函数内的列表,将允许您链接调用:

list