这是我的原始代码:
friends_2017 = ["Robert","John","Smith"]
friends_2018 = ["Andy","David","Tim"]
new_friends = []
all_friends = friends_2017 + friends_2018 + new_friends
print(str(all_friends))
ask_friend = input("Who are you looking for")
if ask_friend in friends_2017:
print(ask_friend,"is in 2017 friends list")
elif ask_friend in friends_2018:
print(ask_friend,"is in 2018 friends list")
else:
print("You don't have this friend")
add_friends = input("Who do you want to add?")
year = input("What year do you want to add them in?")
if year == "2017":
friends_2017.append(add_friends)
elif year == "2018":
friends_2018.append(add_friends)
else:
new_friends.append(add_friends)
print(all_friends)
我试图询问用户输入的朋友的姓名,如果它与2017或2018列表匹配,则在输出年份时与之匹配,否则它将创建新列表。
if year == "2017":
friends_2017.append(add_friends)
elif year == "2018":
friends_2018.append(add_friends)
else:
new_friends.append(add_friends)
print(all_friends)
最后一部分,它应该在所有条件后更新原始列表,但是在所有条件通过后,它不会使用新名称打印出新列表。 请问我在哪里做错了?
答案 0 :(得分:1)
此行:
all_friends = friends_2017 + friends_2018 + new_friends
创建一个新列表,其中包含该时间点其他三个列表中所有内容的副本-它不是对其他三个列表的引用,因此当您对原始三个列表进行更改时,这些更改不会不适用于all_friends
。
在这种情况下all_friends
是一个新列表的原因是+
运算符从其操作数中创建了一个新列表。如果仅设置all_friends = new_friends
,则all_friends
只是对现有new_friends
列表的引用,而您对其中一个所做的任何操作都会影响另一个。
我建议保持all_friends
为最新的方式是使它成为一个按需计算列表的函数,而不是自己的列表:
friends_2017 = ["Robert","John","Smith"]
friends_2018 = ["Andy","David","Tim"]
new_friends = []
def all_friends():
return friends_2017 + friends_2018 + new_friends
print(str(all_friends()))
现在,每次访问all_friends()
时(请注意括号,因为现在是函数调用),它将始终具有这三个列表中的最新值。
另一种选择是,每次追加到其他列表时,重新生成all_friends
:
if year == "2017":
friends_2017.append(add_friends)
elif year == "2018":
friends_2018.append(add_friends)
else:
new_friends.append(add_friends)
all_friends = friends_2017 + friends_2018 + new_friends
,但这要求您记住每次修改任何这些列表时都要执行此操作。如果您采用使用函数的方法,那么每次它都会神奇地起作用。
答案 1 :(得分:1)
+
根据其操作数的内容创建一个 new 列表。 all_friends
的值和friends_2017
等的未来值之间没有关系。如果您希望all_friends
是最新的,请在更新适当的年份列表后进行设置。
答案 2 :(得分:0)
让我们看一个更简单的示例:
friends_2017 = ["Robert","John","Smith"]
friends_2018 = ["Andy","David","Tim"]
new_friends = []
all_friends = friends_2017 + friends_2018 + new_friends
add_friends = input("Who do you want to add?")
friends_2017.append(add_friends)
print(friends_2017)
print(all_friends)
all_friends
是通过将3个列表连接在一起而创建的新列表。然后,您将追加到这些列表之一。 all_friends
不会改变,因为它是一个完全独立的列表。