Печатать элементы вложенного списка один за другим

У меня есть список с несколькими вложенными списками внутри, например:

MyMasterListwithListsInside = [List1,List2,List3,List4]
List1 = [f,e,g,t]
List2 = [t,r,e,y]
List3 = [g,k,f,k]
List4 = [o,y,[t,y]]

Я пытаюсь, чтобы выходные файлы выглядели так:

file 1   
f or List1[1] \n   
t or List2[1] \n   
g or List3[1] \n  
o or List4[1] \n   

file 2  
e or List1[2] \n  
r or List2[2] \n   
k or List3[2]\n   
y or List4[2]\n  

file 3  
g or List1[3] \n   
e or List2[3] \n   
f or List3[3] \n   
t or List4[3][1] \n   
y or List4[3][2] \n   

До сих пор я пробовал:

for x in a:
   with open("whatever","a", encoding="utf-8") as file:
   file.write("\n")
   for y in x:
     if y is not None:
       file.write("\n")
       file.write(y)
       x.remove(y)
       for f in ok:
         file.write("\n")
         file.write(f)
         ok.remove(f)
         for k in kok:
            file.write("\n")
            file.write(k)
            kok.remove(k)
            for s in sok:
               file.write("\n")
               file.write(s)
               sok.remove(s)
               for o in yok:
                  for ik in o:
                     if ik is not None:
                        file.write("\n")
                        file.write(ik)        
                     else:
                          yok.remove(o)
      else:
           print("Done!")

Я также пробовал несколько комбинаций различных углублений. Ни один из них не работает. Либо я получаю List1[1:4],List2[1:4],... и т. д. как вывод, либо List1[1],List2[1],List3[1:4],... и т. д. В какой-то момент мне удалось найти комбинацию записи отступов, но затем у меня возникла синтаксическая ошибка, и во время отладки я потерял правильную форму. Однако я уверен, что есть более элегантное решение, чем создание лидера "для". Мои фактические данные представляют собой список, содержащий несколько вложенных списков, каждый из которых содержит десять элементов. Один из них также содержит 10 вложенных списков. Я также могу пойти на компромисс в формате, который выглядит следующим образом:

f or List1[1] \n   
t or List2[1] \n   
g or List3[1] \n  
o or List4[1] \n   


e or List1[2] \n  
r or List2[2] \n   
k or List3[2]\n   
y or List4[2]\n  


g or List1[3] \n   
e or List2[3] \n   
f or List3[3] \n   
t or List4[3][1] \n   
y or List4[3][2] \n 

Заранее спасибо


person K.E.    schedule 02.06.2016    source источник
comment
stackoverflow.com/q/13908518/3001761   -  person jonrsharpe    schedule 03.06.2016
comment
Этот вопрос вообще не имеет смысла. Это не вложенные списки, это строки. У вас также есть очень странная логика, например, печать каждого элемента в соответствующей позиции на отдельной строке, если только этот элемент не выглядит как список, тогда он занимает n строк (для своих n элементов)? Что происходит на самом деле?   -  person Two-Bit Alchemist    schedule 03.06.2016
comment
ты прав, мой плохой, см. исправление.   -  person K.E.    schedule 03.06.2016
comment
это выглядит почти так, как будто вы хотите, чтобы itertools.chain.fromiterable(zip(* MyMasterListwithListsInside)) генерировал нужный вам порядок, но List4[4] на самом деле не существует, поэтому я не понимаю, что вы на самом деле пытаетесь сделать.   -  person Tadhg McDonald-Jensen    schedule 03.06.2016
comment
Сразу для List4[4], исправление сразу   -  person K.E.    schedule 03.06.2016
comment
@TadhgMcDonald-Jensen itertools сработал, результат именно то, что я хотел, не могли бы вы сделать это ответом, чтобы я мог пометить его как один?   -  person K.E.    schedule 03.06.2016
comment
эээ... ты уверен, что это сработало? Поскольку списки имеют разные размеры (len(List4) == 3), он пропустит последний элемент других списков, если вы сгладите List4, тогда он сделает y после четвертого элемента других списков, который не соответствует желаемому результату... Хотя, если у вас есть itertools делать то, что вы хотите, возможно, опубликуйте ответ самостоятельно, чтобы я мог понять, что вы на самом деле хотели, и, возможно, улучшить его, если смогу.   -  person Tadhg McDonald-Jensen    schedule 03.06.2016
comment
@TadhgMcDonald-Jensen Как это выглядит? Я знаю, что есть место для изменений, но это лучшее, что я мог придумать.   -  person K.E.    schedule 04.06.2016


Ответы (2)


Вы можете сделать что-то рекурсивное (псевдокод):

for each position in a
    printPosition()

function printPosition(arrays, position)
    for each element in array
        if array[position] != array
            print array[position]
        else 
            for each position 
               printPosition()

Это имеет для вас смысл?

person nesooM    schedule 02.06.2016

В конце концов, решение было с itertools. Вот моя общая функция:

    def metin_işle_Page(Kök): 
        sayfa1 = BeautifulSoup(Kök, "lxml") # Page with 10 results
        sayfa = sayfa1.find_all("result") # Each of them are seperate xml #files, 
#with json data in between and 
#each of them having the same structure
        başlıklar2 = [x.find("title") for x in sayfa] 
        başlıklar = [x.get_text() for x in başlıklar2] # A list for their titles 10 elements
        print("Başlıklar Alındı")
        kayıt_kaynağı2 = [x.find("recordsourceinfo") for x in sayfa] # a list for their id
        kayıtUrl = [link.get("landingpage") for link in kayıt_kaynağı2]
        kayıt_id = [link.get_text(strip=True) for link in kayıt_kaynağı2]
        print("kayıt id ve ilgili urller alındı")
        nesne_tipi4 = [x.find("objecttype") for x in sayfa] # another list with 10 elements
        nesne_tipi = [x.get_text(strip=True) for x in nesne_tipi4]
        print("nesne tipleri alındı")
        malzeme3 = [x.find("material") for x in sayfa] # you get the idea ..........
        malzeme = [x.get_text(strip=True) for x in malzeme3]
        print("malzemeler alındı")
        boyut3 = [x.find("dimensions") for x in sayfa]
        boyut2 = [x.prettify(formatter="minimal") for x in boyut3]
        boyut = [x.strip() for x in boyut2]
        print("boyutlar alındı")
        tarihi2 = [x.find("origindating") for x in sayfa]
        kaynak_tarihi2 = [x.get_text(strip=True) for x in tarihi2]
        kaynak_tarihi = [x.strip() for x in kaynak_tarihi2]
        print("kaynak tarihleri alındı")
        eski_Yer2 = [x.find("ancientfindspot") for x in sayfa]
        eski_yer1 = [x.get_text("|", strip=True) for x in eski_Yer2]
        eski_yer = [x.strip() for x in eski_yer1]
        print("Eserin ait olduğu yer alındı")
        modern_yer3 = [x.find("modernfindspot") for x in sayfa]
        modern_yer1 = [x.get_text(strip=True) for x in modern_yer3]
        modern_yer = [x.strip() for x in modern_yer1]
        print("Eserin bulunduğu modern yer alındı")
        modern_ülke3 = [x.find("moderncountry") for x in sayfa]
        modern_ülke1 = [x.get_text(strip=True) for x in modern_ülke3]
        modern_ülke = [x.strip() for x in modern_ülke1]
        print("Eserlerin bulunduğu ülkeler alındı")
        korunma_ülkesi3 = [x.find("conservationcountry") for x in sayfa]
        korunma_ülkesi1 = [x.get_text("|", strip=True) for x in korunma_ülkesi3]
        korunma_ülkesi = [x.strip() for x in korunma_ülkesi1]
        print("Eserin korunduğu ülkeler alındı")
        müzesi3 = [x.find("museum") for x in sayfa]
        müzesi1 = [x.get_text("|", strip=True) for x in müzesi3]
        müzesi = [x.strip() for x in müzesi1]
        print("Eserin korunduğu Müze alındı")
        yazıttipi3 = [x.find("inscriptiontype") for x in sayfa]
        yazıttipi2 = [x.get_text(strip=True) for x in yazıttipi3]
        yazıt_tipi = [x.strip() for x in yazıttipi2]
        print("Yazıt tipleri alındı")
        yazıt_tekniği3 = [x.find("engravingtechnique") for x in sayfa]
        yazıt_tekniği2 = [x.get_text(strip=True) for x in yazıt_tekniği3]
        yazıt_tekniği = [x.strip() for x in yazıt_tekniği2]
        print("yazıt teknikleri alındı")
        metin_normal2 = [x.find("text") for x in sayfa]
        metin_normal1 = [x.get_text(strip=True) for x in metin_normal2]
        metin_normal = [x.strip()for x in metin_normal1]
        print("Metinler alındı")
        metin_epidoc3 = [x.find("textepidoc") for x in sayfa]
        metin_epidoc2 = [x.prettify(formatter="minimal") for x in metin_epidoc3]
        metin_epidoc = [x.strip() for x in metin_epidoc2]
        print("Epidoc metinleri alındı")
        kaynakça3 = [x.find_all("bibliography") for x in sayfa] # Here is the 
        #tricky part for every list so far there was only 1 element beneath the tag
        #corresponding in each results, but for this tag, there are 
        #sometimes 2 or more elements
        kaynakça4 = [] # I made a new list in order to match the number of other lists.
        for x in kaynakça3: # list containing more than one elements
            kaynaklar = [] # some empty list
            for y in x: # since x, a list of "bibliography" element for each element
            # of sayfa,a list of "result" elements, i call y, each attestation of
            # bibliography in x.
                adf1 = y.get_text(strip=True) # I took the text of each attestation
                #and reproduce them in another list. This way I got rid of the tags
                # plus it is difficult to work with a Result Set, and less difficult
                # to work with a list
                adf = adf1.strip() 
                kaynaklar.append(adf)
            kaynakça4.append(kaynaklar)
        kaynakça = []
        for g in kaynakça4: # here I tried to join together the nested lists within
        # the nested list element, so that I would have at most two level of nested
        #lists.
            zip(g)
            kaynakça.append(g)
        Genel_sayfa = [] # Then I created a master list and appended my processed
        Genel_sayfa.append(başlıklar) #elements within it.
        Genel_sayfa.append(kayıt_id)
        Genel_sayfa.append(kayıtUrl)
        Genel_sayfa.append(nesne_tipi)
        Genel_sayfa.append(malzeme)
        Genel_sayfa.append(boyut)
        Genel_sayfa.append(kaynak_tarihi)
        Genel_sayfa.append(eski_yer)
        Genel_sayfa.append(modern_yer)
        Genel_sayfa.append(modern_ülke)
        Genel_sayfa.append(korunma_ülkesi)
        Genel_sayfa.append(yazıt_tekniği)
        Genel_sayfa.append(yazıt_tipi)
        Genel_sayfa.append(metin_normal)
        Genel_sayfa.append(metin_epidoc)
        Genel_sayfa.append(kaynakça)
        Sıralı = itertools.chain.from_iterable(zip(* Genel_sayfa)) #used iterate tools
        sayfasayısı = list(range(0,112)) #over the lists which contain the same number
        for SayfaNo in sayfasayısı: #of elements
            with open("TümSayfa" + str(SayfaNo), "a", encoding="utf-8") as sonuç:
                sonuç.write("\n")
                for k in Sıralı:
                    sonuç.write("\n")
                    sonuç.write("\n")
                    afrc = str(k) #to assure that there was no problem in the output
                    sonuç.write("\n") # I changed the chain object to string 
                    sonuç.write(afrc)
                sonuç.close()
person K.E.    schedule 03.06.2016
comment
хорошо, я вообще не понимаю, как попытка в вашем сообщении с вопросом связана с логикой, которую вы пытались применить к спискам, но это кажется еще менее уместным, чем оригинал, что, черт возьми, вы на самом деле делаете? - person Tadhg McDonald-Jensen; 04.06.2016
comment
@TadhgMcDonald-Jensen С помощью кода я пытаюсь проанализировать объект ответа веб-страницы, который выдает 10 результатов. Если каждый результат равен x, есть 10x, каждый из которых имеет точную структуру. У каждого x есть 4 элемента, назовем их y, поэтому в каждом x 10y. Поскольку каждый x идентичен, единственный способ отличить их - это порядок их появления в списке результатов. То же самое относится и к каждому y, их можно различить только по порядку их появления в x. Чего я не делал, так это различать их соответствующим образом, используя структуру словаря. Вот почему код выглядит как беспорядок. - person K.E.; 04.06.2016
comment
хорошо, я вижу, что почти весь этот код анализирует запрос, но это не имеет ничего общего с первоначальным вопросом, который вы задали о том, как я могу перейти от «вложенного списка» к «выводу в файлы». Так что я просто действительно запутался что вы на самом деле хотели, задав свой вопрос... - person Tadhg McDonald-Jensen; 04.06.2016
comment
@TadhgMcDonald-Jensen Поскольку я не использовал структуру словаря для хранения полученных данных, я искал решение для повторения каждого элемента каждого списка в том порядке, в котором они появляются в списке, и инструменты итерации действительно работали. Но я переделаю код, чтобы использовать словарную структуру, она слишком хрупкая, чтобы использовать ее в других подобных случаях. Кстати, спасибо за терпение. - person K.E.; 04.06.2016