【问题标题】:Change randomly half of the values of list随机更改列表值的一半
【发布时间】:2021-11-02 21:53:48
【问题描述】:

我正在 python 上处理 2D 列表并尝试从网格中隐藏一些值:

想象一下这是网格:

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

我用这段代码得到的结果:

    def startingArray(self,grid_copy): 
        for i in range (len(grid_copy)):
            n= self.CELL
            if n>len(grid_copy):
                grid_copy[i]=[2 for i in grid_copy]
            else:
                for i in range(n):
                    position=random.randrange(0,len(grid_copy[i]))
                    grid_copy[i][position]= 2  

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

很好,但是,我想要一些可以随机隐藏一半值的东西? 有什么想法吗?

【问题讨论】:

  • 想要的结果是什么?
  • 将所有坐标放在一个列表中。使用random.choices() 随机选择一半坐标。然后隐藏这些元素。
  • 谢谢@U12-Forward 我正在寻找可以随机改变网格的一半元素的东西:在 [[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]] 在 [[0, 2, 1, 2], [2, 1, 0, 2], [2, 2, 1, 0], [1, 2, 2, 0]]
  • @Barmar choices 使用抽样 with 替换,因此很可能会多次选择一个或多个索引。相反,leo 应该使用sample 来保证从 16 个集合中选择 8 个不同的坐标对。

标签: python list random


【解决方案1】:

试试这个

def startingArray(self,grid_copy): 
    for row in grid_copy:
       prevItems = []
       for i in range(len(row)/2+1):
           if (i not in prevItems):
               row[random.randint(0, len(row) - 1)] = 2
               prevItems.append(i)

我没试过这个。但我认为这会如你所愿。

【讨论】:

  • 这不会隐藏一半的元素,因为您正在计算 if 失败的迭代次数。
猜你喜欢
  • 2019-04-24
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2014-04-14
  • 2017-06-04
  • 1970-01-01
相关资源
最近更新 更多