2016-06-02 2 views
-2

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

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 

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

+0

http://stackoverflow.com/q/13908518/3001761 – jonrsharpe

+0

Этот вопрос не имеет смысла. Это не вложенные списки, это строки. У вас также есть очень странная логика, например, печать каждого элемента в соответствующей позиции в его собственной строке, _unless_ этот элемент выглядит как список, тогда он занимает строки 'n' (для своих' n' членов)? Что на самом деле происходит? –

+0

Вы правы, я плохой, см. Исправление. –

ответ

0

Вы могли бы сделать что-то рекурсивный как это (psuedocode):

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() 

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

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() 
+0

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

+0

@ TadhgMcDonald-Jensen С помощью кода я пытаюсь проанализировать объект ответа веб-страницы, который генерирует 10 результатов. Если каждый результат равен x, то 10x, каждый из которых имеет точную структуру. Каждый x, имеет 4 элемента, называет их y, поэтому в каждом x есть 10y. Поскольку каждый x идентичен, единственный способ отличить их - по своему порядку они появляются в списке результатов. То же самое применимо для каждого y, их можно отличить только по порядку, который они появляются в x.То, что я не делал, заключается в том, чтобы различать их, используя структуру словаря. Вот почему код выглядит как беспорядок. –

+0

ОК, я вижу, что почти весь этот код обрабатывает запрос, но это не имеет никакого отношения к исходному вопросу, который вы задали о «как я могу перейти от к ». Поэтому я просто очень смущен что вы на самом деле хотели, задав свой вопрос ... –

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