Как сократить код для создания нескольких списков? - PullRequest
0 голосов
/ 03 декабря 2018

Я делаю 12 списков, которые проходят тот же процесс.К сожалению, я не могу понять, как заставить их всех делать это в цикле, и я был вынужден повторить один и тот же код 12 раз и взять гигантский кусок текста.

Вот небольшойчасть кода, которую мне пришлось написать.

  l1 = []
  l1.append(random.choice(easy))
  if "none" in l1:
    l1.remove("none")
  else:
    psblnsrs.append(l1[0])
    easy.remove(l1[0])
  l1.append(random.choice(special))
  if "none" in l1:
    l1.remove("none")
  elif len(l1) >1:
    usblhks.append(l1[1])
  else:
    usblhks.append(l1[0])
  while sum(len(l1) for l1 in l1) < 12:
    l1.append(random.choice(junk))
  random.shuffle(l1)
  l2 = []
  l2.append(random.choice(easy))
  if "none" in l2:
    l2.remove("none")
  else:
    psblnsrs.append(l2[0])
    easy.remove(l2[0])
  l2.append(random.choice(special))
  if "none" in l2:
    l2.remove("none")
  elif len(l2) >1:
    usblhks.append(l2[1])
  else:
    usblhks.append(l2[0])
  while sum(len(l2) for l2 in l2) < 12:
    l2.append(random.choice(junk))
  random.shuffle(l2)

Имейте в виду, есть двенадцать списков, которые необходимо составить, это всего лишь два .

Я не слишком хорошо разбираюсь в кодировании больших циклов и именовании переменных.Я хочу что-то вроде этого:

for i in range(12):
  l(i) = []
  l(i).append ...

Есть ли способ заставить эту работу или подобный способ сделать эту работу?

Кроме того, если код трудно понять, источникматериал здесь .

Ответы [ 4 ]

0 голосов
/ 03 декабря 2018

Я думаю, что вы, вероятно, могли бы сделать это в значительной степени так же, как вы это делаете.

    lists = []
    for list in lists:
        list = []
        list.append(random.choice(easy))
        if "none" in list:
            list.remove("none")
        else:
            psblnsrs.append(list[0])
            easy.remove(list[0])
        list.append(random.choice(special))
        if "none" in list:
            list.remove("none")
        elif len(list) >1:
            usblhks.append(list[1])
        else:
            usblhks.append(list[0])
        while sum(len(list) for list in list) < 12:
            list.append(random.choice(junk))
        random.shuffle(list)

Если я не пропущу что-то о том, как ваш код работает в апстриме, вы должны просто быть в состоянии сделать это,в итоге вы получите список списков, на который вы можете ссылаться по их индексу.(например, списки (2))

0 голосов
/ 03 декабря 2018

Рассмотрим следующий код

#Create a list to contain lists
myLists = []

#Add to our list 12 empty lists
for i in range(12):
    myLists.append([])

#Loop over each list and add 12 to each list.
for currentList in myLists:
    currentList.append(12)

#Print out the results
print(myLists)

, используя for currentList in myLists, мы можем перебирать каждый список в нашем «списке списков» и выполнять операции с currentList, прежде чем переходить к следующему.Ваш код, который, следовательно, выполняет одинаковые операции с каждым списком по очереди.

0 голосов
/ 03 декабря 2018

Как указывал Хелвуд, лучшая структура данных для ваших двенадцати списков - просто хранить их в другом списке.Таким образом, вы можете получить к ним доступ с помощью super_list[0], super_list[1], и, что более важно, вы можете перебирать их с помощью for sublist in super_list: ... вместо того, чтобы вообще ссылаться на них.

Таким образом, вам нужно только написать свою логикуодин раз.Что вы хотите сделать, это определить функцию:

def list_update(current_list):
   '''
   List management logic code here.
   '''
   ...
   return current_list

Затем в основной логике вашего кода:

for sub_list in super_list:
    sub_list = list_update(sub_list)

Таким образом, когда вам нужно внести изменения вТо, как вы обрабатываете эти списки, вам не нужно записывать изменения 12 раз, вам нужно всего лишь написать их один раз.

0 голосов
/ 03 декабря 2018

Функции могут пригодиться

def make_list(inp_list1=psblnsrs, inp_list2=usblhks, easy_list=easy, special_list=special, junk_list=junk):
    l1 = []
    l1.append(random.choice(easy_list))
    if "none" in l1:
      l1.remove("none")
    else:
      psblnsrs.append(l1[0])
      easy.remove(l1[0])
    l1.append(random.choice(special_list))
    if "none" in l1:
      l1.remove("none")
    elif len(l1) >1:
      usblhks.append(l1[1])
    else:
      usblhks.append(l1[0])
    while sum(len(l1) for l1 in l1) < 12:
      l1.append(random.choice(junk_list))
    return random.shuffule(l1)

l = []
for i in range(12):
  l.append(make_list())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...