繁体   English   中英

如何使用列表中的每个项目仅循环一次列表以在​​Python中的另一个列表的开头插入?

[英]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的新手,在完成任务的任务时遇到了麻烦。 我已经定义了一个除了以下区域之外运行良好的函数:我正在处理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循环和可能的元组,但我不知道如何让它们做我做的事情需要他们这样做。 此外,我不允许硬编码任何东西。

在您的代码中,您将新元素插入到相同且唯一的列表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

尝试这个,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM