一个接一个地打印嵌套列表元素

时间:2016-06-02 22:16:19

标签: python-3.x output nested-lists file-writing listiterator

我有一个包含多个嵌套列表的列表,如下所示:

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],...等等。有一次我设法找到缩进的写组合,但后来我有一个语法错误,当我调试时,我输了正确形式。但是我确信有一个更优雅的解决方案,而不是成为“for”的领导者。 我的实际数据是一个包含多个嵌套列表的列表,每个列表包含十个元素。其中一个还包含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 

先谢谢

2 个答案:

答案 0 :(得分:0)

你可以像这样做递归(伪代码):

self.horizontalHeader().setStretchLastSection(True)

这对你有意义吗?

答案 1 :(得分:0)

毕竟解决方案是使用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()