2017-02-21 16 views
1

Я новичок в Python и у меня проблемы с выполнением задания для задания. Я определил функцию, которая работает хорошо, за исключением следующей области: я работаю со списком из 10 строк, и мне нужно вставить каждую строку из этого списка только один раз в начало соответствующего рандомизированного списка из 10 строк, которые я сделанный для файла, снятого с терминала с помощью sys.argv (имеется в виду, что в моем списке соответствует 10 файлов с одной строкой, соответствующей каждому файлу). Я знаю, что мне нужно использовать метод .insert(0, new_string), чтобы вставить новую строку из моего списка из 10 строк.Как прокрутить список, используя каждый элемент из списка только один раз, чтобы вставить в начало другого списка в Python?

Это отрывок из моей функции, показывая, что я пытался до сих пор для достижения этой цели:

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.

Как должен выглядеть результат, это примерно так (после применения функции к каждому из 10 файлов с использованием sys.argv), где 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. Я полагаю, что он будет включать цикл цикла и, возможно, кортежи, но я не знаю, как заставить их делать то, что мне нужно делать. Кроме того, мне не разрешено что-либо делать.

ответ

0

В вашем коде вы вставляете новые элементы в тот же и уникальный список randomlist, поэтому они все накапливаются в конце.

Вы можете добавить элемент item в начале (копия) randomlist (не затрагивая 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 
+0

Я сожалею, я не уверен, я понимаю, где я добавляю линию, которую вы мне дали. Я попытался добавить, что между строками 2 и 3 кода в моем исходном вопросе, и мой вывод был только случайным списком, который был сгенерирован без элементов new_list, вставленных перед генерированием случайного списка. Я также попытался заменить свою строку 4 кода моего вопроса вашей линией, и я получил тот же результат. – biocoder

+0

Это зависит от того, что вы хотите сделать с измененным списком. См. Править, чтобы просто распечатать их. – Julien

0

Попробуйте это,

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 
+0

Добавляю ли я это в свою существующую функцию, из которой мой код выше является частью? Или это отдельно? Извините, мне нужно указать, где на самом деле вставить те строки, которые вы мне дали. Кроме того, не является 'l1-item1' таким же, как "" string1 "? – biocoder

+0

Это отдельно.Мне нужно было создавать случайные списки, так как у меня не было 'choice' и' old_list' из вашего кода. Основной трюк состоял в том, чтобы выбрать случайный список из цикла, а затем удалить его из пула, чтобы другие элементы не были добавлены к нему. «l1-item» присутствует в одном из случайных списков, к которым вы хотите добавить элементы «stringx». – MJB

+0

Я изменил «l1-item» на «rstring1», а также на другие элементы. – MJB

Смежные вопросы