【问题标题】:How to add elements to the already existing elements instead of overwriting them in a list?如何将元素添加到已经存在的元素而不是在列表中覆盖它们?
【发布时间】:2020-09-30 16:29:16
【问题描述】:

我这里有这段代码:

def alist():
    wor = []
    definition = []
    wele = str(input("Enter a word: "))
    dele = str(input("Enter a definition: "))
    x = wor.append(wele)
    y = def.append(dele)
    print("Words' List: ", wor, "\nDefinitions' List: ", definition)

每当我运行它时,我都可以将元素添加到列表wordef,但是,每当我再次运行它时,它会覆盖我之前第一次运行它时添加的元素。我通过将wordef 转换为全局变量来避免这个问题。除了将这两个列表做成全局变量,还有其他方法吗?

谢谢!

【问题讨论】:

  • def 是 python 关键字,不要将其用作变量名
  • 有你的功能return你需要什么。

标签: python list input global-variables


【解决方案1】:

每次调用该函数时,您都会创建新的空列表。该函数应将列表作为参数并对其进行修改。

def alist(wlist, dlist):
    wele = input("Enter a word: ")
    dele = input("Enter a definition: ")
    wlist.append(wele)
    dlist.append(dele)

word_list = []
def_list = []

word_count = int(input("How many words are you defining? "))
for _ in range(word_count):
    alist(word_list, def_list)
print("Words' List: ", word_list, "\nDefinitions' List: ", def_list)

制作列表参数允许您拥有多个单词列表,例如

spanish_words = []
spanish_defs = []
alist(spanish_words, spanish_defs)

但是,将相关数据保存在单独的列表中通常是一种糟糕的设计,您必须保持同步。最好使用单个字典或元组列表,这样所有相关项(例如单词及其定义)都在一起。

【讨论】:

  • 在这种情况下不是word_count,类似于range。是否可以不让用户决定输入多少字? word_listdef_list 是否仍被视为全局变量?
  • 我不明白你的第一个问题。用户正在决定输入多少单词。他们输入计数,然后它使用range() 重复多次。
  • 是的,word_listdef_list 是全局变量,但 alist() 不仅限于这些变量。所以你可以有一对英语变量,另一对西班牙语变量,等等。
  • while True: if input("Do you want to enter another word?") == "no": break ...
  • 您可以使用带有类变量的类。
【解决方案2】:

当您附加到列表时,您将其分配给新变量 x 和 y,但您永远不会对这些变量做任何事情。 wordef 永远不会改变。您实际上不必将 append() 分配给新变量,它会在原地发生。

如果您希望您的两个列表在每次调用函数时始终保留它们对所包含内容的记忆,那么您应该在函数范围之外定义它们,否则每次调用函数时都将它们重新启动为空列表。

l1 = []
l2 = []

def alist():
     wele = str(input("Enter a word: "))
     dele = str(input("Enter a definition: "))
     l1.appnd(wele)
     l2.append(dele)
     print("Words' List: ", l1, "\nDefinitions' List: ", l2)

【讨论】:

  • 这是我一开始所拥有的,但是,我正在寻找一种不同的解决方案,而不是将这种情况下的 l1l2 放在函数范围之外。
  • 我不完全确定您为什么不愿意在函数之外定义它们,因为您标记为已接受的答案正是这样做的,但我想一种方法是添加 if 语句以查看列表是否包含项目,如果不包含则将列表创建为空列表。
猜你喜欢
  • 2011-10-23
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 2021-02-20
  • 2020-08-28
  • 1970-01-01
相关资源
最近更新 更多