【问题标题】:Python: making one list from for loop [closed]Python:从for循环制作一个列表[关闭]
【发布时间】:2018-08-03 11:42:58
【问题描述】:

我正在编写一个星期的代码,现在我感到迷茫,我正试图从多个列表中转为一个,然后添加到 CSV。该程序正在对网站进行网络抓取。第 1 部分创建链接并获取重定向链接,然后在第 2 部分中连接到站点并获取表格。第 3 部分是从 HEADERS 中获取单词(大约有 43 个单词),它正在查找所有单词的描述,然后从单词的左侧添加 60 个字符,在右侧添加 60 个字符。它在循环中,因为我需要从中获取大量房地产报价。希望你明白。编码需要大量精力!

您可以在这里找到整个程序(编辑部分):https://stackoverflow.com/posts/comments/90155616?noredirect=1

代码如下:

for p in page_soup.select('section#description'):
            p = str(p)
            p = p.lower() 

            lista_k = []            

            for j in range(len(HEADERS3)): 
                #print('j:',j)
                # find_p znajduje wszystkie słowa kluczowe z HEADERS3 w paragrafie na stronie kontraktu.
                find_p = re.findall(HEADERS3[j],p)
                # listy, które wyświetlają pozycję startową poszczególnych słów muszą zaczynać się od '-' lub 0?,
                # ponieważ, gdy dane słowo nie zostanie odnalezione to listy będą puste w pierwszej iteracji pętli
                # co w konsekewncji doprowadzi do błędu out of range
                m_start = []
                m_end = []
                lista_j = []


                for m in re.finditer(HEADERS3[j], p):
                    #print((m.start(),m.end()), m.group())
                    m_start.append(m.start())
                    m_end.append(m.end())

                #print(h)

                for k in range(len(m_start)):
                    #właściwe teraz nie wiem po co to jest..
                    try:
                        x = m_start[k]
                        y = m_end[k]
                    except IndexError:
                        x = m_start[0]
                        y = m_end[0]
                    #print('xy:',x,y)
                    #print(find_p) 
                #print(HEADERS3[j])
                    z = (HEADERS3[j]+':',p[-60+x:y+60]+'    ++-NNN-++') 
                    lista_j.append(z)
                    #print(z)
                #print ('lista_j:',lista_j)
                lista_k.append(lista_j)
            print('lista_k:',lista_k)

输出是:

                ----------- 3 -----------
 http://www.kontrakt.szczecin.pl/mieszkanie-wynajem-46m2-2000pln-gorna-bezrzecze-szczecin-zachodniopomorskie,351353
['351353', '2', '2 000 PLN', '-', '46\xa0m2', '0', '2', 'Widna', '-', '-', 'Gazowe', 'Tak', 'Tak', 'Piec gazowy', '-', 'Cegła', '2007', 'Bardzo dobry', '-', '-', '-', 'Liczba tarasów: 2', '-', 'Ogród: Tak', '-', 'Garaż: Tak', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-']
lista_j: []
lista_j: []
lista_j: []
lista_j: [('gospodarcze:', 'arkingowe na samochód ,rower ale również jako pomieszczenie gospodarcze z półkami. cena najmu do negocjacji,warunkiem jednak koniec    ++-NBP-++')]
lista_j: []
lista_j: [('parking:', 'ie do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe . w pobliżu wiele sklepów,między innymi dwa supermarkety    ++-NBP-++'), ('parking:', 'z śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samochód ,rower ale również jako pomieszczenie gospod    ++-NBP-++')]
lista_j: []
lista_j: [('garaż:', 'nie dwupokojowe usytuowane na parterze z tarasem ,ogrodem i garażem.budynek wybudowany w 2007r. na nowym kameralnym,bezpieczn    ++-NBP-++'), ('garaż:', 'ience piec dwuobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe     ++-NBP-++'), ('garaż:', 'uobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe . w pobliżu w    ++-NBP-++'), ('garaż:', ' 220zł w nim zaliczka na wodę , wywóz śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samochód ,rower    ++-NBP-++')]
lista_j: [('ogród:', 'in.salon z aneksem kuchennym ok 24mkw z wyjściem na taras i ogród.taras w częsci zadaszony z kącikiem z siedziskiem oraz ozdo    ++-NBP-++'), ('ogród:', 'kiem z siedziskiem oraz ozdobną pergolą w części otwarty na ogród z zadbanym trawnikiem oraz krzewami :porzeczką,borówką i ma    ++-NBP-++')]
lista_j: [('ogrod:', 'ne mieszkanie dwupokojowe usytuowane na parterze z tarasem ,ogrodem i garażem.budynek wybudowany w 2007r. na nowym kameralnym    ++-NBP-++'), ('ogrod:', 'umywalką i wc. w łazience piec dwuobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne    ++-NBP-++')]
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: [('remon:', 'o zarządcy 220zł w nim zaliczka na wodę , wywóz śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samoc    ++-NBP-++')]
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: [('aneks:', 'miejskiej-szybki dojazd do centrum miasta ok.10 min.salon z aneksem kuchennym ok 24mkw z wyjściem na taras i ogród.taras w cz    ++-NBP-++'), ('aneks:', 'anym trawnikiem oraz krzewami :porzeczką,borówką i maliną.w aneksie kuchennym meble w zabudowie a w wyposażeniu: kuchenka gaz    ++-NBP-++')]
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: [('zabudow:', 'ami :porzeczką,borówką i maliną.w aneksie kuchennym meble w zabudowie a w wyposażeniu: kuchenka gazowa amica,z piekarnikiem ele    ++-NBP-++'), ('zabudow:', ' przeszklona ława.w drugim pokoju sypialni ok.15mkw:szafa w zabudowie typu komandor oraz duże łóżko i dwie szafki nocne.łazienk    ++-NBP-++')]
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_j: []
lista_k: [[], [], [], [('gospodarcze:', 'arkingowe na samochód ,rower ale również jako pomieszczenie gospodarcze z półkami. cena najmu do negocjacji,warunkiem jednak koniec    ++-NBP-++')], [], [('parking:', 'ie do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe . w pobliżu wiele sklepów,między innymi dwa supermarkety    ++-NBP-++'), ('parking:', 'z śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samochód ,rower ale również jako pomieszczenie gospod    ++-NBP-++')], [], [('garaż:', 'nie dwupokojowe usytuowane na parterze z tarasem ,ogrodem i garażem.budynek wybudowany w 2007r. na nowym kameralnym,bezpieczn    ++-NBP-++'), ('garaż:', 'ience piec dwuobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe     ++-NBP-++'), ('garaż:', 'uobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne miejsca parkingowe . w pobliżu w    ++-NBP-++'), ('garaż:', ' 220zł w nim zaliczka na wodę , wywóz śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samochód ,rower    ++-NBP-++')], [('ogród:', 'in.salon z aneksem kuchennym ok 24mkw z wyjściem na taras i ogród.taras w częsci zadaszony z kącikiem z siedziskiem oraz ozdo    ++-NBP-++'), ('ogród:', 'kiem z siedziskiem oraz ozdobną pergolą w części otwarty na ogród z zadbanym trawnikiem oraz krzewami :porzeczką,borówką i ma    ++-NBP-++')], [('ogrod:', 'ne mieszkanie dwupokojowe usytuowane na parterze z tarasem ,ogrodem i garażem.budynek wybudowany w 2007r. na nowym kameralnym    ++-NBP-++'), ('ogrod:', 'umywalką i wc. w łazience piec dwuobiegowy typu vaillant .z ogrodu przejście do garażu.przed garażem podjazd i ogólnodostępne    ++-NBP-++')], [], [], [], [], [], [], [('remon:', 'o zarządcy 220zł w nim zaliczka na wodę , wywóz śmieci i f. remontowy.garaż do wykorzystania jako miejsce parkingowe na samoc    ++-NBP-++')], [], [], [], [], [], [], [], [], [], [], [], [], [('aneks:', 'miejskiej-szybki dojazd do centrum miasta ok.10 min.salon z aneksem kuchennym ok 24mkw z wyjściem na taras i ogród.taras w cz    ++-NBP-++'), ('aneks:', 'anym trawnikiem oraz krzewami :porzeczką,borówką i maliną.w aneksie kuchennym meble w zabudowie a w wyposażeniu: kuchenka gaz    ++-NBP-++')], [], [], [], [], [], [('zabudow:', 'ami :porzeczką,borówką i maliną.w aneksie kuchennym meble w zabudowie a w wyposażeniu: kuchenka gazowa amica,z piekarnikiem ele    ++-NBP-++'), ('zabudow:', ' przeszklona ława.w drugim pokoju sypialni ok.15mkw:szafa w zabudowie typu komandor oraz duże łóżko i dwie szafki nocne.łazienk    ++-NBP-++')], [], [], [], [], [], [], [], []]
[] 

输出(IMG):https://i.stack.imgur.com/M5qQi.png

【问题讨论】:

  • 您的实际问题是什么?
  • 对不起,我现在真的厌倦了。我想列一张这样的清单 ['','','',garage+garage+garage,'','','',kitchen+kitchen,'','']。
  • 这是因为您在循环中的每次迭代期间都重新初始化了lista_j = []。将lista_j = [] 移出循环。
  • 不,什么都不返回

标签: python python-3.x for-loop


【解决方案1】:

问题是在循环的每次迭代中,您都会一遍又一遍地初始化lista_j。您需要将其移出循环。

未经测试,但应该可以工作:

for p in page_soup.select('section#description'):
            p = str(p)
            p = p.lower() 

            lista_k = []  
            lista_j = []

            for j in range(len(HEADERS3)): 
                #print('j:',j)
                # find_p znajduje wszystkie słowa kluczowe z HEADERS3 w paragrafie na stronie kontraktu.
                find_p = re.findall(HEADERS3[j],p)
                # listy, które wyświetlają pozycję startową poszczególnych słów muszą zaczynać się od '-' lub 0?,
                # ponieważ, gdy dane słowo nie zostanie odnalezione to listy będą puste w pierwszej iteracji pętli
                # co w konsekewncji doprowadzi do błędu out of range
                m_start = []
                m_end = []



                for m in re.finditer(HEADERS3[j], p):
                    #print((m.start(),m.end()), m.group())
                    m_start.append(m.start())
                    m_end.append(m.end())

                #print(h)

                for k in range(len(m_start)):
                    #właściwe teraz nie wiem po co to jest..
                    try:
                        x = m_start[k]
                        y = m_end[k]
                    except IndexError:
                        x = m_start[0]
                        y = m_end[0]
                    #print('xy:',x,y)
                    #print(find_p) 
                #print(HEADERS3[j])
                    z = (HEADERS3[j]+':',p[-60+x:y+60]+'    ++-NNN-++') 
                    lista_j.append(z)
                    #print(z)
                #print ('lista_j:',lista_j)
                lista_k.append(lista_j)
            print('lista_k:',lista_k)

甚至在第一个 for 循环之外,具体取决于您的情况:

lista_k = []
lista_j = []
for p in page_soup.select('section#description'):
            p = str(p)
            p = p.lower() 

            for j in range(len(HEADERS3)): 
                #print('j:',j)
                # find_p znajduje wszystkie słowa kluczowe z HEADERS3 w paragrafie na stronie kontraktu.
                find_p = re.findall(HEADERS3[j],p)
                # listy, które wyświetlają pozycję startową poszczególnych słów muszą zaczynać się od '-' lub 0?,
                # ponieważ, gdy dane słowo nie zostanie odnalezione to listy będą puste w pierwszej iteracji pętli
                # co w konsekewncji doprowadzi do błędu out of range
                m_start = []
                m_end = []



                for m in re.finditer(HEADERS3[j], p):
                    #print((m.start(),m.end()), m.group())
                    m_start.append(m.start())
                    m_end.append(m.end())

                #print(h)

                for k in range(len(m_start)):
                    #właściwe teraz nie wiem po co to jest..
                    try:
                        x = m_start[k]
                        y = m_end[k]
                    except IndexError:
                        x = m_start[0]
                        y = m_end[0]
                    #print('xy:',x,y)
                    #print(find_p) 
                #print(HEADERS3[j])
                    z = (HEADERS3[j]+':',p[-60+x:y+60]+'    ++-NNN-++') 
                    lista_j.append(z)
                    #print(z)
                #print ('lista_j:',lista_j)
                lista_k.append(lista_j)
            print('lista_k:',lista_k)

【讨论】:

  • 它仍然是 i j 循环,所以它做了 43 次。也是循环中的嵌套元组,如何将其取出到一个列表中?
  • 是的好多了!但现在它是这样的: lista_k: [[('kuchni:', '(2018r.) na ul. kusocińskiego. pokoje częściowo umeblowane, kuchnia wyposażona w lodówkę, kuchenkę i meble. łazienka z kabiną ++-NNN-+ +'), ('opłat:', 'we,fitness itp.czynsz najmu wynosi 1850 złotych dodatkowo opłaty za energię elektryczną oraz opłaty do zarządcy wysokości ++-NNN-++'), 里面有嵌套的(元组?)列表。如何摆脱它们?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多