Вывести 'x' количество предметов 'y' раз? - PullRequest
0 голосов
/ 21 ноября 2018

Итак, я пытаюсь напечатать элемент для list1 один раз, затем первый элемент item2 указывает, сколько элементов из списка 3 будет напечатано, затем следующий цикл начинается с того места, где он остановился.Затем повторяйте до тех пор, пока у меня не закончатся элементы из списка 1. Я думаю, что у меня все списки отформатированы правильно, потому что список 1 - это список строк, список 2 - это список целых чисел, а список 3 - это еще один список строк

prevval = 0
for i in list1:
    print(i)
    for j in list2:
        val = j
        print(list3[prevval:val])
        prevval = val   

он печатает первое x количество элементов из списка 3, всего 8 раз (то есть, сколько элементов в списке 2)

Образец:

list1 = ["test","please"]
list2 = [2, 4, 6]
list3 = ["hard", "to", "come", "up","with","values"]

будет напечатано:

test
hard to
hard to
hard to
hard to come

ожидается:

test
hard to
please
come up with values

и т. Д.

Ответы [ 6 ]

0 голосов
/ 21 ноября 2018
list1 = ['test', 'please', 'this', 'works']
list2 = [2,4,6]
list3 = tmp = ['hard', 'to', 'come', 'up', 'with', 'values', 'because', 'it', 'is', 'simple', 'with', 'python']
for index, item in enumerate(list1):
    try:
       print(tmp[:list2[index]])
       tmp = tmp[list2[index]:]
    except:
       break
0 голосов
/ 21 ноября 2018
#!/bin/python

list1 = ["test","please"]
list2 = [2, 4, 6]
list3 = ["hard", "to", "come", "up","with","values"]

for i in list1:
    print(i)
    s = []
    for j in range(list2.pop(0)):
        s.append(list3.pop(0))
    print(" ".join(s))

Выход:

test
hard to
please
come up with values
0 голосов
/ 21 ноября 2018

Самый короткий здесь:

prevval=0
for x,y in zip(list1,list2):
   print(x)
   print(' '.join(list3[prevval:prevval+y]))
   prevval+=y

Вывод:

test
hard to
please
come up with values

zip их и итерация, добавьте prevval как обычно и удалите внутренний циклВот и все изменения, обратите внимание, что это делает его короче (на сегодняшний день).

0 голосов
/ 21 ноября 2018

Это уничтожит list3:

list1 = ["test","please"]
list2 = [2, 4, 6]
list3 = ["hard", "to", "come", "up","with","values"]

l1_idx = 0
l2_idx = 0

while l3_idx < len(list3):
  print(list1[l1_idx])
  l1_idx += 1
  outarr = []
  for x in range(list2[l2_idx]):
    try:
      outarr.append(list3.pop(0))
    except IndexError:
      break
  print(" ".join(outarr))
  l2_idx += 1
0 голосов
/ 21 ноября 2018

Для каждого слова в list1 вы хотите напечатать фрагмент list3, определяемый соответствующим значением в list2.Вы можете сделать это, сжав list1 и list2 и вычислив соответствующие фрагменты:

list1 = ["test","please"]
list2 = [2, 4, 6]
list3 = ["hard", "to", "come", "up","with","values"]

prevval = 0
for w1, i in zip(list1, list2):
    print(w1)
    if prevval < len(list3): 
        print(list3[prevval:prevval + i])
        prevval += i

Вывод

test
['hard', 'to']
please
['come', 'up', 'with', 'values']

Если вы хотите отформатироватьсписки в виде строки, вы можете использовать join:

' '.join(print(list3[prevval:prevval + i]))
0 голосов
/ 21 ноября 2018
prevval = 0

val=0

for i in list1:

    print(i)

    val=list2[val]

    print(list3[prevval:val])

    prevval = val
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...