【问题标题】:How to randomly replace a string in a list如何随机替换列表中的字符串
【发布时间】:2016-04-30 18:16:10
【问题描述】:

如果我有这样的事情:

L = ['-','-','-','-','-','-','-']

假设我想替换一定数量的这些字符串。如何在列表中随机选择一个位置以将其替换为其他位置?例如:

L = ['-','*','-','-','-','*','*']

【问题讨论】:

  • 你有没有尝试过?也许从import random开始

标签: python python-3.x


【解决方案1】:

其实可以使用模块random及其函数randint,如下:

import random

num_replacements = 3 
L = ['-','-','-','-','-','-','-']

idx = random.sample(range(len(L)), num_replacements)

for i in idx:
    L[i] = '*'

有关更多信息,您可以查看random 模块文档:https://docs.python.org/3/library/random.html

编辑:现在使用random.sample 采样随机数,而不是使用random.randint,这可能会在不同的迭代中生成相同的数字。

【讨论】:

  • 单独调用 randint 可以生成相同的数字。使用random.sample 可能会更好。
【解决方案2】:

使用 random.randrange

import random

some_list=["-","-","-","-","-","-","-"]

n=2
for i in range(n):
    some_list[random.randrange(0,len(some_list))]="*"

非重复解:

import random

some_list=["-","-","-","-","-","-","-"]

n=8
if n>len(some_list):
    some_list=["*" for i in some_list]
else:
    for i in range(n):
           position=random.randrange(0,len(some_list))
           while some_list[position]=="*":
                   position=random.randrange(0,len(some_list))
           some_list[position]="*"

print(some_list)

【讨论】:

  • 如果`random.randrange(0, len(some_list)) 在两次调用中返回相同的值怎么办?
【解决方案3】:
import random as r

L = ['-','-','-','-','-','-','-']

def replaceit(L,char):
    L[r.randint(0,len(L))] = char
    return L

newL = replaceit(L,'*')
print newL

只需用 newL 调用 replaceit 即可替换另一个随机字符。

【讨论】:

    【解决方案4】:

    使用random.choice

    import random
    
    L = ['-','-','-','-','-','-','-']
    
    while L.count('*') < 3:
        pos = random.choice(range(len(L)))
        L[pos] = '*'
    
    print(L)
    

    【讨论】:

      【解决方案5】:

      假设你想用'a'替换它:

      尝试以下方法:

      from random import *
      
      L = ['-','-','-','-','-','-','-']
      r = randint(0,len(L))
      L[r] = 'a'
      
      print L
      

      【讨论】:

        【解决方案6】:

        我有 Java 背景,是 python 的新手。 我会建议从该列表的第一个索引到最后一个索引生成一个随机数,并将新字符串插入到新生成的索引中。

        请参阅this question 在列表中的特定位置插入值。

        【讨论】:

          【解决方案7】:

          这种不重复的解决方案依赖于random.shuffle()

          >>> import random
          >>> L = ['-','-','-','-','-','-','-']
          >>> n = 3    # number of strings to replace
          >>> indices = range(len(L))
          >>> random.shuffle(indices)
          >>> for i in indices[:n]:
          ...     L[i] = '*'
          ... 
          >>> L
          ['-', '*', '*', '-', '*', '-', '-']
          

          【讨论】:

            猜你喜欢
            • 2021-07-20
            • 2017-05-20
            • 1970-01-01
            • 1970-01-01
            • 2017-04-01
            • 2018-05-21
            • 1970-01-01
            • 2018-09-09
            • 2021-05-29
            相关资源
            最近更新 更多