【问题标题】:Can't *copy* an index from list to another with a twist in Python不能在 Python 中将索引从列表中*复制*到另一个列表中
【发布时间】:2023-04-11 05:12:02
【问题描述】:

我对 python 还很陌生,我正在尝试抓住绳索,并决定一个有趣的学习方式是制作一个俗气的 MUD 类型的游戏。我将要展示的这段代码的目标是让三个随机选择的敌人(从列表中)呈现给“英雄”进行战斗。我遇到的问题是python通过引用而不是值(我认为)从列表复制到列表,因为下面显示的代码......

import random

#ene = [HP,MAXHP,loDMG,hiDMG]   
enemies = [[8,8,1,5,"Ene1"],[9,9,3,6,"Ene2"],[15,15,2,8,"Ene3"]]
genENE = []  

#skews # of ene's to be gen, favoring 1,2, and 3 
eneAppears = 3

for i in range(0,eneAppears):
    num = random.randint(5,5)
    if num <= 5:
        genENE.insert(i,enemies[0])
    elif num >= 6 and num <=8:
        genENE.insert(i,enemies[1])
    else:
        genENE.insert(i,enemies[2])

#genENE = [[8,8,1,5,"Ene1"],[9,9,3,6,"Ene2"],[15,15,2,8,"Ene3"]]          
for i in range(0,eneAppears):
    if eneAppears == 1:
        print "A " + genENE[0][4] + " appears!"
    else:
        while i < eneAppears:
            print "A " + genENE[i][4] + " appears!"
            i = eneAppears

genENE[1][0] = genENE[1][0] - 1
print genENE

基本上,我有一个“主”敌人列表,在我的第一个“for”循环期间,我用它来将我想要的任何一个复制到另一个列表的索引中。通常随机生成的数字是 1 到 10,但我遇到的问题更容易通过强制将同一个敌人插入我的“副本”列表中多次来显示。基本上,当我尝试在“复制”列表中减去同名敌人的值时,它们都会减去该值(参见最后两行代码)。我进行了很多搜索,但找不到将单个索引从一个列表复制的方法。有什么建议么?谢谢!

【问题讨论】:

    标签: python list copy indexing


    【解决方案1】:

    改变

    genENE.insert(i,enemies[0])
    

    genENE.insert(i,enemies[0][:])
    

    这将强制复制而不是引用列表。另外,在这种情况下,我会使用追加而不是插入。

    【讨论】:

    • 太棒了!令人惊讶的是,我距离成功只有 3 个字符...我还按照您的建议实现了追加,我假设是因为它更快、更清晰、更不容易出错?谢谢一百万!
    • list(enemies[0]) 与enemy[0][:] 做同样的事情,而且更明确一点,但选择是个人喜好问题。
    • @Ruseel Borogove,你说得对。我的良心一直在告诉我,我应该提到这一点。
    • 我也喜欢 list(enemies[0]) 并且打字少,无法击败。有趣的是,这是多么的语法,两种不同的语法执行相同的事情,很有趣。
    【解决方案2】:

    they all subtract that value他们都是什么意思?如果您的意思是两个列表,那么您的问题是因为您只是引用列表而不是创建第二个列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多