【问题标题】:Replace a number of elements of a List [duplicate]替换列表的多个元素[重复]
【发布时间】:2021-03-03 22:31:42
【问题描述】:

假设我有这个列表列表:

x=[['0', '0', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0', '0']]

现在我得到了

的输入
(2,2), (5,4)) (second coordinate represents last pixel where no "1" should be)

which results in 

x=[['0', '0', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0', '0'],
 ['0', '0', '1', '1', '1', '0'],
 ['0', '0', '1', '1', '1', '0']]

for index,i in enumerate(x[3][2:4]):
    i ="1"

我不知道为什么这对第一行不起作用...

也欢迎任何想法我可以一次制作矩形:) 提前致谢

(0,0), (1,1)
should give 

x=[['1', '0', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0', '0'],
 ['0', '0', '0', '0', '0', '0']]

【问题讨论】:

    标签: python python-3.x list replace items


    【解决方案1】:

    让我们从为什么它只适用于你所说的第二行开始。

    for index, i in enumerate(x[3][2:4]):
        i = "1"
    

    在这里,您正在访问x[3],这是您列表列表的第三行。 因此,您实际更改的是该单行中的一堆列 (2:4)。

    让我们看看如何一次正确地做到这一点

    x = [['0', '0', '0', '0', '0', '0'],
        ['0', '0', '0', '0', '0', '0'],
        ['0', '0', '0', '0', '0', '0'],
        ['0', '0', '0', '0', '0', '0']]
    
    start = (2, 2)
    end = (5, 4)
    
    for i in range(start[0], end[0] - 1):
        x[i][start[1]:end[1] + 1] = ['1'] * (end[1] - start[1] + 1)
    

    x更改后的值:

    x: [['0', '0', '0', '0', '0', '0'],
        ['0', '0', '0', '0', '0', '0'],
        ['0', '0', '1', '1', '1', '0'],
        ['0', '0', '1', '1', '1', '0']]
    

    我们迭代列表的行,每个x[i] 也将是一个列表,我们将其值(使用切片)更改为适当的值。 适当的值必须与列表切片的类型相同,这就是我们创建另一个我们需要的长度的 list['1'] * (end[1] - start[1] + 1) 的原因。

    【讨论】:

    • 有一个问题 start=(0,0) 和 end=(1,1) 它应该把左上角变成 1 但它保持 0
    • 您好,您定义坐标的方式对我来说有点奇怪。让我考虑几分钟会回复你的
    • 是的,我知道坐标是个脑残***
    • 我认为如果我们表示开始位置和结束位置都包括在内,那么 (0, 0) -> (0, 0) 在左上角绘制 1 对您来说也会更容易。新旧转换很容易,只需添加 (2, 0)。如果您同意这一点,我将使用正确的代码更新答案。编辑:您可能会喜欢这种方式的另一件事是您的坐标将在列表大小列表的范围内(现在它们不在)
    • 这对我没有帮助,因为这只是 Class 的一种方法......
    【解决方案2】:

    注意:我没有意识到列表的元素是一个字符串。请将[0] 更改为['0']

    这是我谦虚的回答。这段代码:

    x, y = 6, 4
    start, end = (0, 0), (1, 1)
    dat = []
    for i in range(y):
        if start[1]<=i<end[1]:
            dat.append([0]*(start[0])+[1]*(end[0]-start[0])+[0]*(x-end[0]))
        else:
            dat.append([0]*x)
    data
    

    或此代码:

    x = [[0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0]]
    start, end = (0, 0), (1, 1)
    for i in range(len(x)):
        if start[1]<=i<end[1]:
            x[i][start[0]:end[0]] = [1] * (end[0] - start[0])
    x
    

    将结果:

    [[1, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 0]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 2018-08-25
      相关资源
      最近更新 更多