【问题标题】:Python iterating a list and creating a nested list out of all iterationsPython迭代一个列表并从所有迭代中创建一个嵌套列表
【发布时间】:2020-10-20 15:47:40
【问题描述】:

我一直在尝试弄清楚如何编写以下代码:

我有一个清单说:

L = [1, 2, 3, 4, 5]

我正在尝试将每个元素以 2 个为一组进行相乘,因此我希望最后有 4 个列表:

[-1, -2, 3, 4, 5]
[1, -2, -3, 4, 5]
[1, 2, -3, -4, 5]
[1, 2, 3, -4, -5]

现在有了这 4 个列表,我打算再次创建一个嵌套列表:

M = [[-1, -2, 3, 4, 5], [1, -2, -3, 4, 5],[1, 2, -3, -4, 5], [1, 2, 3, -4, -5]]

到目前为止,我得到了这个:

L = [1, 2, 3, 4, 5]
L2 = L.copy()
print(L)

for x in range(0,2):
    for y in range(x,2+x):
        N = []
        L2[y] = L2[y] * -1
        N.append(L2)
        print(N)

它显示为这样

[1, 2, 3, 4, 5]
[[-1, 2, 3, 4, 5]]
[[-1, -2, 3, 4, 5]]
[[-1, 2, 3, 4, 5]]
[[-1, 2, -3, 4, 5]]

我无法生成嵌套列表,因为我不知道如何调用其元素已从我创建的循环中修改的列表。我的循环也有问题。我希望它以全新的方式读取旧列表,而不是从前一个循环中引用更改后的列表。

我对 python 很陌生,但我很喜欢学习这种新语言。很多时候,我被卡住了,很容易弄清楚我需要发生什么。这对我来说有点棘手,所以我正在寻求帮助。谢谢!

【问题讨论】:

标签: python


【解决方案1】:

很酷的问题。试试这个:

L = [1, 2, 3, 4, 5]

def foo(lst, inx):
    print(inx)
    new_l = lst.copy()
    new_l[inx] *= -1
    new_l[inx+1] *= -1
    return new_l

[foo(L, i) for i in range(4)]

输出是:

[[-1, -2, 3, 4, 5], [1, -2, -3, 4, 5], [1, 2, -3, -4, 5], [1, 2, 3, -4, -5]]

【讨论】:

    【解决方案2】:

    试试这个:

    L = [1, 2, 3, 4, 5]
    L2 = []
    print(L)
    
    k = 2   #the number of items to be modified
    for x in range(0, len(L)-k+1):
        N = L.copy()
        for y in range(x, x+k):
            N[y] *= -1
        L2.append(N)
        print(N)
    

    您可以根据需要更改 k 值。

    【讨论】:

      猜你喜欢
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多