【问题标题】:Appending lists to new list in for loop [duplicate]在for循环中将列表附加到新列表[重复]
【发布时间】:2019-04-05 17:32:50
【问题描述】:

我目前正在 python 中试验列表,并试图创建一个程序来模拟名称游戏(click here for refrence)

程序要求用户输入并生成一个包含用户名每个字母的列表。但是,它必须生成 3 个新名称,每个名称都以“b”、“f”、“m”开头。这是我遇到问题的地方。附加到 master_list 并稍后打印我的结果时,我得到了输出:

[['m', 'o', 'b', 'e', 'r', 't'], ['m', 'o', 'b', 'e', 'r', 't'], 
['m', 'o', 'b', 'e', 'r', 't']]

当用户输入 =“罗伯特”时

这是我的代码:

# Asks for user name
user_name = input("Enter name here: ")
name = list(user_name)

# Create an empty list that will contain a subsets of lists.
master_list = []

# List containing the first letter of each new name
beginning_of_word = ["b", "f", "m"]

# Creates 3 new names and appends them to master_list
for var in beginning_of_word:
    new_list = name
    new_list.pop(0)
    new_list.insert(0, var)
    print(new_list)
    master_list.append(new_list)
    if new_list != name:
        new_list = name

打印 master_list 时的预期输出应该是:

[['b', 'o', 'b', 'e', 'r', 't'], ['f', 'o', 'b', 'e', 'r', 't'], 
['m', 'o', 'b', 'e', 'r', 't']]

有人知道为什么会这样吗?

【问题讨论】:

    标签: python for-loop nested-lists


    【解决方案1】:

    虽然您将变量命名为new_list,但事实上您每次都在同一个列表上进行操作。要修改列表并保留原始列表,您需要复制列表:

    # Asks for user name
    user_name = input("Enter name here: ")
    name = list(user_name)
    
    # Create an empty list that will contain a subsets of lists.
    master_list = []
    
    # List containing the first letter of each new name
    beginning_of_word = ["b", "f", "m"]
    
    # Creates 3 new names and appends them to master_list
    for var in beginning_of_word:
        new_list = list(name)  # a copy of 'name'
        new_list[0] = var
        master_list.append(new_list)
    
    print(master_list)
    

    输出

    % python3 test.py
    Enter name here: Robert
    [['b', 'o', 'b', 'e', 'r', 't'], ['f', 'o', 'b', 'e', 'r', 't'], ['m', 'o', 'b', 'e', 'r', 't']]
    %
    

    【讨论】:

    • 谢谢。我刚才在测试我的代码时遇到了这个问题。创建一个新列表解决了它。
    猜你喜欢
    • 2020-09-25
    • 2020-03-26
    • 2015-04-27
    • 2020-11-22
    • 2022-12-15
    • 1970-01-01
    • 2020-07-23
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多