Dividir una lista en python en diferentes archivos de texto

Quiero escribir tres archivos de texto separados para cada uno de los tres elementos de la lista a continuación:

my_list = ['text1', 'text1', 'text1', 'text2', 'text2', 'text2', 'text3', 'text3', 'text3'] result = [my_list[idx:idx + 3] for idx in range(0, len(my_list), 3)] outfiles = ['file1', 'file2', 'file3'] for f in outfiles: with open ('{}.txt'.format(f),'w') as fo: for x in result: for y in x: fo.write(str(y) + '\n') 

Por favor, ayúdame a corregir el código de arriba.

archivo1 debe consistir en:

 text1 text1 text1 

archivo2:

 text2 text2 text2 

archivo3:

 text3 text3 text3 

Pero mi código anterior escribe:

 text1 text1 text1 text2 text2 text2 text3 text3 text3 

Puede intentar esto usando un bucle para iterar sobre una porción de la lista. Aquí, estamos usando la variable i para indicar qué parte de la lista se usará en cada iteración:

 my_list = ['text1', 'text1', 'text1', 'text2', 'text2', 'text2', 'text3', 'text3', 'text3'] outfiles = ['file1', 'file2', 'file3'] i = 0 # to keep count of which words will be written for f in outfiles: with open ('{}.txt'.format(f), 'w') as fo: for word in my_list[i:i + 3]: fo.write(word + "\n") i += 3 

Probablemente lo usaría itertools.groupby aquí …

 for i, (k, group) in enumerate(groupby(my_list), 1): with open('file{}.txt'.format(i), 'w') as fout: fout.writelines(item + '\n' for item in group) # fout.write('\n'.join(group)) # another alternative which doesn't write a newline at the end of the file. 

Esto supone que la lista inicial se ordenó y parece un poco tonto escribir lo mismo en un archivo una y otra vez, pero si realmente tiene una lista más diversa, siempre puede ordenar y agrupar por el resultado de alguna función clave que Se aplicaría a cada elemento de la lista …

 outfiles = ['file1', 'file2', 'file3'] my_list = ['text1', 'text1', 'text1', 'text2', 'text2', 'text2', 'text3', 'text3', 'text3'] for i in range(0, len(my_list), len(outfiles)): with open(my_list, 'a') as outfile: for line in outfiles[i:i+len(my_list)]: outfile.write(line) outfile.write('\n') 

Se puede hacer lo siguiente con ediciones mínimas a su código:

 outfiles = ['file1', 'file2', 'file3'] my_list = ['text1', 'text1', 'text1', 'text2', 'text2', 'text2', 'text3', 'text3', 'text3'] round = 0 i = 0 while len(files)*round + i < len(my_list): for i,outfilepath in enumerate(outfiles): with open(outfilepath) as outfile: outfile.write(my_list[len(files)*round + i]) i += 1