2016-03-11 11 views
0

У меня есть несколько списков, например,Как вы пишете один элемент из нескольких списков в файл, прежде чем переходить к следующему элементу?

x = [1,2,3,4] 
y = [5,6,7,8] 
z = [9,10,11,12] 

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

Выход, который я пытаюсь получить, - 1 5 9 2 6 10 3 7 11 4 8 12. Итак, все первые элементы, затем все второе и так далее.

+0

Что вы пробовали ? Можете ли вы показать свой код, пожалуйста? Кроме того, считаете ли вы, что все списки имеют одинаковый размер? – idjaw

+1

'zip (x, y, z)'? Вы пробовали искать свой вопрос, прежде чем спрашивать? –

+0

Я пробовал вложенные для циклов, но это не сработало, так как оно повторяется слишком много раз. Как и для i в диапазоне (len (x)): и для j в диапазоне (len (y)) и k в диапазоне (len (x)) 'Также нет списков не одного размера (необязательно) – 79t97g

ответ

1

Использование Zipи преобразовать каждый целочисленный элемент string, так что вы можете присоединиться к ним:

x = [1,2,3,4] 
y = [5,6,7,8] 
z = [9,10,11,12] 

g = " ".join(str(x) for t in zip(x, y, z) for x in t) 

g Запись в файл.

Отрывок о том, как Zip работ:

Когда вы zip() вместе M списки, содержащие N элементов, каждый, то результат имеет N элементов. Каждый элемент является M-кортежем.

Другими словами, zip(x,y,z) изменяет ваш:

[1,2,3,4] 
[5,6,7,8] 
[9,10,11,12] 

в

[(1,5,9),(2,6,10),(3,7,11),(4,8,12)] 
+0

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

+0

@ezcats приветствуются. :) – Ian

0

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

number = max(x.len(), y.len(),z.len()) 
count = 0 
total = {} 
while count < number: 
    try: 
      total.append(x[count]) 
    except: 
      pass 
    try: 
      total.append(y[count]) 
    except: 
      pass 
    try: 
      total.append(z[count]) 
    except: 
      pass 
    count += 1 
print(' '.join(total)) 
+0

Почему бы не использовать 'itertools.zip_longest()'? – zondo

+0

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

+0

Не волнуйся. Я не знал об этом до этого месяца :) – zondo

0

В случае, если у вас нет списков одинаковой длины, вы можете использовать zip_longest (или izip_longest в питоне 2):

from itertools import zip_longest 

x = [1, 2, 3, 4, 1] 
y = [5, 6, 7, 8, 99] 
z = [9, 10, 11, 12] # short list 

reordered = [] 
for elements in zip_longest(x, y, z): 
    reordered.extend(elements) 

Результаты в списке:

[1, 5, 9, 2, 6, 10, 3, 7, 11, 4, 8, 12, 1, 99, None]

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