【问题标题】:Remove item from list using a string name使用字符串名称从列表中删除项目
【发布时间】:2021-01-31 10:37:50
【问题描述】:

我想知道是否有一种方法可以根据事先的某些内容更改项目从哪个列表中删除。

list0 = ("1", "2", "3")
list1 = ("4", "5", "6")
var = randint(0,1)
if var == 0:

    list = "list0"
else:

    list = "list1"

list.pop(0)
print(list)

*据我所知,python 认为我正在尝试从字符串“list0//list1”中“弹出”第一项(取决于选择的内容),而不是列表。有没有办法可以将变量设置为我的列表名称之一?谢谢!

【问题讨论】:

  • 不要在 Python 内置后命名变量:您现在已经覆盖了内置类型(和函数)list
  • 使用字典,键为“list0”和“list1”(或者可能只是键“0”和“1”;从那里开始,您可以创建一个元组列表,因此 list0 变为mylist[0] 和 list1 mylist[1].
  • 请注意,您的列表是元组,它们是不可变的。你无法更改它们,因此调用.pop 会导致错误(实际上,对于元组,pop 方法不存在)。如果要修改元组,请先将它们转换为列表。
  • 最后,为什么不直接使用if var == 0: list0.pop() ; else: list1.pop()
  • 我有许多不同的列表 (9),我宁愿在检查每一个时不执行一大堆代码(由我的一行 list.pop 表示)。不过谢谢,我会试一试!

标签: python python-3.x string list variables


【解决方案1】:

程序中的变量名和数据有区别。

您无法(轻松)匹配程序中的数据和变量名称。

您可以使用映射来匹配数据:

lists = {0: ["1", "2", "3"],
         1: ["4", "5", "6"]}
var = randint(0, 1)
lst = lists[var]  
lst.pop(0)
print(lst)

【讨论】:

  • 请注意,此示例使用元组(如问题所示),但这会导致 .pop() 出现 AttributeError
【解决方案2】:
(list1 if var else list0).pop(0)

注意list0list1 必须是列表而不是元组:元组是不可变的。所以你应该这样改变你的代码:

list0 = ["1", "2", "3"]
list1 = ["4", "5", "6"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2021-12-28
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多