簡體   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