【问题标题】:Python: Is there an easier way to remove and replace an item in a list?Python:有没有更简单的方法来删除和替换列表中的项目?
【发布时间】:2016-05-31 04:11:41
【问题描述】:

我想知道是否有更简洁的方法来重新分配列表中的随机项:首先将原始项设置为变量,然后用另一个预设变量替换列表中的该项。

listofwords 是一个包含 9 个项目的列表。

random_val = random.randint(0,8)

removed_word = listofwords[randomval]
listofwords[randomval] = substitute_word

【问题讨论】:

  • 请注意,您实际上并没有删除列表项。
  • 迂腐,但您正在重新分配与删除。如果您想删除并重新插入(顺便说一句很慢),您将使用.pop(randomval) 然后.insert(randomval, substitute_word) 但请不要这样做。只是改变你所说的你在做什么。 ;-)
  • 感谢 dawg - 已编辑

标签: python list python-2.7 replace


【解决方案1】:

您可以使用tuple 打包/解包来进行单行交换,仅此而已;并没有真正改进代码:

listofwords[randomval], removed_word = substitute_word, listofwords[randomval]

【讨论】:

  • 注意:我选择的顺序最小化了读取listofwords[randomval]和写回它之间的时间; Python 的规范保证 listofwords[randomval] 是最后读取并使用此顺序首先写入的。不过,这是一个毫无意义的区别;它缩小了线程情况下的竞争条件,但并没有消除它(两个线程进行交换可以获得相同的初始值,而不是一个线程获得另一个线程设置的替换值),因此基于排序的差异非常没有意义,我只是出于习惯尽量减少在“不稳定状态”中花费的时间。
【解决方案2】:

我认为唯一可以缩短代码的方法是将最后两个赋值合并到一行中。

removed_word, listofwords[randomval] = listofwords[randomval], substitute_word

但这并没有真正使代码更加简洁。如果你必须做很多,你可以把这个过程变成一个函数。但是,没有内置的方法可以做到这一点,所以你的方法看起来不错。

【讨论】:

    【解决方案3】:

    要将变量分配给列表项,最短的方法是:

    OldValue = ListOfWords[index]
    

    更改列表中项目的最短方法是:

    ListOfWords[index] = NewValue
    

    所以不,没有更短的方法。


    但是,有一种交换变量的简单方法。

    ListOfWords = ["Hello", "Moon"]
    Value = "World"
    

    如果您使用要更改的值创建 Value,请使用:

    ListOfWords[1], Value = Value, ListOfWords[1]
    

    这会将Value 更改为ListOfWords[1] 并将ListOfWords[1] 更改为Value。在外壳中:

    >>> ListOfWords[1], Value = Value, ListOfWords[1]
    >>> Value = "World"
    >>> ListOfWords
    ['Hello', 'World']
    >>> Value
    'Moon'
    

    正如其他答案所暗示的,您可以使用变量 swap 将其替换为 ListOfWords[1], OldValue = NewValue, ListOfWords[1]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 2023-02-21
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多