【问题标题】:How to loop through a list using each item from a list only once to insert at the beginning of another list in Python?python - 如何使用列表中的每个项目仅循环一次以插入Python中另一个列表的开头?
【发布时间】:2017-07-10 14:55:51
【问题描述】:

我是 Python 新手,无法完成作业任务。我已经定义了一个运行良好的函数,除了以下区域:我正在处理一个包含 10 个字符串的列表,我只需要将该列表中的每个字符串插入一次到相应的随机列表的开头,该列表也包含 10 个字符串,我为使用sys.argv从终端提取的文件制作(这意味着有10个文件,我的列表中的一个字符串对应于每个文件)。我知道我必须使用 .insert(0, new_string) 方法从我的 10 个字符串列表中插入新字符串。

这是我的功能的摘录,展示了我迄今为止为实现这一目标所做的努力:

randomlist = (list(map(choice, old_list)))
new_list = ["string1", "string2", "string3", "string4", "string5", "string6", "string 7", "string8", "string9", "string10"]
for new_string in new_list:
    randomlist.insert(0, new_string)

当我运行这段代码时,我得到一个列表的输出,其中来自new_list 的每个元素都插入到我的randomlist 元素之前。这会导致一个包含 20 个元素的列表,而它应该只有 11 个。

输出应该是这样的(在使用 sys.argv 将函数应用于 10 个文件中的每一个文件之后),其中 rstring 对应于我的 randomlist 中的一个字符串:

["string1", "rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
["string2", "rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
["string3", "rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
["string4", "rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
["string5", "rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
["string6", "rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
["string7", "rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
["string8", "rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
["string9", "rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
["string10", "rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]

我也尝试了其他方法,但这是我可以获得输出的最简单的方法。作为回顾,我只需要使用new_list 中的每个元素一次(从左到右的顺序)并将其插入我的randomlist 的开头。我正在使用的每个文件都有一个randomlist,我通过sys.argv 调用它们我相信它会涉及某种类型的for循环,可能还有元组,但我不知道如何让它们这样做我需要他们做什么。另外,我不允许对任何内容进行硬编码。

【问题讨论】:

    标签: python list loops tuples


    【解决方案1】:

    在您的代码中,您将新元素插入到相同且唯一的列表randomlist 中,这就是它们最终都堆积起来的原因。

    您可以在randomlist(的副本)的开头添加一个元素item(不影响randomlist 本身),如下所示:

    [item] + randomlist
    

    要一次创建所有输出,只需将其嵌套在列表推导中:

    all_outputs = [[item] + randomlist for item in new_list]
    for output in all_outputs:
        print output
    

    或者如果您只需要打印它们,您可以这样做:

    for item in new_list:
        print [item] + randomlist
    

    【讨论】:

    • 对不起,我不确定我明白我在哪里添加你给我的那行。我尝试在原始问题的代码的第 2 行和第 3 行之间添加它,而我的输出只是生成的随机列表,没有在生成随机列表之前插入 new_list 元素。我还尝试用您的行替换我的问题代码的第 4 行,我得到了相同的结果。
    • 这真的取决于你想对修改后的列表做什么。请参阅编辑以将它们打印出来。
    【解决方案2】:

    试试这个,

    import random
    
    list1 = ["rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
    list2 = ["rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
    list3 = ["rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
    list4 = ["rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
    list5 = ["rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
    list6 = ["rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
    list7 = ["rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
    list8 = ["rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
    list9 = ["rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
    list10 = ["rstring1", "rstring2", "rstring3", "rstring4", "rstring5", "rstring6", "rstring7", "rstring8", "rstring9", "rstring10"]
    
    lists = [list1, list2, list3, list4, list5, list6, list7, list8, list9, list10]
    
    new_list = ["string1", "string2", "string3", "string4", "string5", "string6", "string7", "string8", "string9", "string10"]
    for new_string in new_list:
        randomlist = random.choice(lists) #Selects a random list from pool
        randomlist.insert(0, new_string)
        lists.remove(randomlist) #Removes list from pool once it has been selected
    
    print list1
    print list2
    print list3
    print list4
    print list5
    print list6
    print list7
    print list8
    print list9
    print list10
    

    【讨论】:

    • 我是否将其添加到我上面的代码所属的现有函数中?或者这是分开的?抱歉,我需要指示在哪里实际插入你给我的那些行。另外,'l1-item1' 和 ""string1" 不一样吗?
    • 这是分开的。我需要生成随机列表,因为您的代码中没有choiceold_list。主要技巧是从循环内部选择随机列表,然后将其从池中删除,这样其他项目就不会添加到其中。 “l1-item”存在于您要添加“stringx”元素的随机列表之一中。
    • 我已将“l1-item”更改为“rstring1”,其他项目也是如此。
    • 我尝试了您发布的新代码,但仍然出现错误。有什么方法可以在这里私信你吗?如果您看到我尝试输入的内容,我认为您会更容易看到我做错了什么,但我宁愿不在这里公开发布我的实际代码。
    • 我在这里没有看到任何私人消息。运行我发布的代码时遇到了什么错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 2017-08-27
    • 1970-01-01
    相关资源
    最近更新 更多