Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表值不为';追加后不更新_Python_List - Fatal编程技术网

Python 列表值不为';追加后不更新

Python 列表值不为';追加后不更新,python,list,Python,List,这是我的原始代码: 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 f

这是我的原始代码:

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)
最后一部分,它应该在所有条件都通过后更新原始列表,但是在所有条件都通过后,它不会用新名称打印新列表。 请问我哪里做错了?

这一行:

all_friends = friends_2017 + friends_2018 + new_friends
创建一个新列表,其中包含该时间点其他三个列表中所有内容的副本——它不是对其他三个列表的引用,因此当您对原始三个列表进行更改时,这些更改不适用于所有朋友

在本例中,
all\u friends
是一个新列表的原因是
+
运算符使用其操作数创建一个新列表。如果您只是设置了
all\u friends=new\u friends
,那么
all\u friends
将只是对现有
new\u 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()
(请注意括号,因为现在它是一个函数调用),它都将始终具有这三个列表中的最新值

另一个选项是每次附加到其他列表时重新生成
所有朋友

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

但这需要您记住,每次修改这些列表时都要这样做。如果使用函数的方法,它每次都会神奇地工作。

+
从操作数的内容创建一个新列表。
all\u friends
的值与
friends\u 2017
等的未来值之间没有关系。如果希望
all\u friends
是最新的,请在更新相应的年份列表后进行设置。

让我们看一个更简单的示例:

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个列表连接在一起创建的新列表。然后将其附加到其中一个列表中。这不会改变所有的朋友,因为这是一个完全独立的列表。

所以我假设如果我设置“所有的朋友=新的朋友=朋友=2017年的朋友=2018年的朋友”,3行就可以解决问题了?谢谢你,btwI将更新此答案,并提供一些建议,说明如何使
所有朋友
保持最新。
所有朋友=[]所有朋友。追加(朋友2018)所有朋友。追加(朋友2017)所有朋友。追加(新朋友)
我设法修复并使代码正常工作,但在打印时输出的结果会出错(所有的朋友)都不如美丽,
[['Andy',David',Tim'],['Robert',John',Smith',Will'],[]code>有什么办法可以让它变得更好吗?那是因为
所有的朋友现在都是对其他列表的引用列表,而不是其他列表中的值列表。