2016-03-01 5 views
2

Вот код:Python смешивает два списка, и я понятия не имею, почему

import requests 
import bs4 

response = requests.get('http://discoverygc.com/forums/serverinterface.php?action=players_online') #Loads page 
soup = bs4.BeautifulSoup(response.text) 
table = soup.find("div", {"id": "forum"}) 
rowsNo = (str(table).count('<tr>') - 2) #Number of players online. Minus 2 to remove leading title and column description rows 
players = systems = [] #Define lists 
for i in range(3, (rowsNo + 3)): 
    rows = table.findAll('tr')[i] 
    cols = rows.findAll('td') 
    player = cols[0].get_text() 
    system = cols[1].get_text() 
    players.append(player) 
    systems.append(system) 

print(players) 
print(systems) 

Если удалить либо players.append(player) или systems.append(system) код прекрасно работает и выводит правильный список:

['-Vasqez-', '[-=XTF=-]Neon.Bunny-[R]', "[SV]-Valley'", '<-JohnyWalker->', '~VP)Bad.Tibira', 'Alkanius', 'Apex91', 'Araroba', 'Baldor', 'Benediction', 'Black_Bird', 'Boost', 'Caelius.Moya[X]', 'Core|APM-Maverick', 'Daftwagen', 'Dee.Leers', 'Emiko:Hayashi', 'Gamma-6', 'Gauri', 'Gigi.7', 'GMG|GTS-Komahashi-Maru', 'Grawmod', 'GrazySlon', 'Hunor', 'Jakob-Schleiter', 'Joyita', 'Judge_BigJo', 'JulyJalwa', 'Kruger|KMS-Lankow', 'Luxor', 'monitor91', 'Morgulis', 'Nuggets', 'OSI-Mendes', 'Ronny.Rochester', 'Samura|-Arata', 'Samura|-Ichikawa', 'Shpritzen', 'Stardrifter', 'The_Altair', 'The.Liner.of.Dreams', 'Tony.Sosa', 'Wilde.RNC-Nestor'] 

или:

['Omega-11', 'Omega-49', 'Pennsylvania', 'Magellan', 'Omicron Gamma', 'Kyushu', 'Pennsylvania', 'Kyushu', 'Omega-5', 'Manchester', 'Cassini', 'Newcastle', 'Connecticut', 'Omega-47', 'Stuttgart', 'Stuttgart', 'Munich', 'New York', 'Hudson', 'Sigma-13', 'Languedoc', 'Colorado', 'Virginia', 'Stuttgart', 'New London', 'Magellan', 'New York', 'New Tokyo', 'Manchester', 'New York', 'Pennsylvania', 'Omega-3', 'Omega-49', 'New Berlin', 'California', 'Nagano', 'New Berlin', 'Okinawa', 'Magellan', 'Texas', 'Ontario', 'New Berlin', 'Stuttgart'] 

Однако, если я поместил обе линии в него, они смешивают оба вместе для обоих списков :

['-Vasqez-', 'Omega-11', "[SV]-Valley'", 'Omega-49', '<-JohnyWalker->', 'Pennsylvania', '=Z=Exositas', 'Magellan', '~VP)Death.Incarnator', 'Omicron Gamma', 'Alkanius', 'Shikoku', 'Apex91', 'Pennsylvania', 'Baldor', 'Kyushu', 'Benediction', 'Omega-5', 'Black_Bird', 'Manchester', 'Boost', 'Cassini', 'Caelius.Moya[X]', 'Connecticut', 'Core|APM-Maverick', 'Omega-47', 'Daftwagen', 'Stuttgart', 'Darf.Acour', 'Texas', 'Dee.Leers', 'New Berlin', 'Emiko:Hayashi', 'Munich', 'Gamma-6', 'New York', 'Gauri', 'Hudson', 'Gigi.7', 'Orkney', 'GMG|GTS-Komahashi-Maru', 'Colorado', 'Grawmod', 'Virginia', 'GrazySlon', 'Stuttgart', 'Hunor', 'Manchester', 'Jakob-Schleiter', 'New Berlin', 'Joyita', 'Magellan', 'Judge_BigJo', 'New York', 'Kruger|KMS-Lankow', 'New Tokyo', 'Luxor', 'Manchester', 'monitor91', 'New York', 'Morgulis', 'Pennsylvania', 'Nuggets', 'Omega-3', 'OSI-Mendes', 'Omega-49', 'Ronny.Rochester', 'California', 'Samura|-Arata', 'Nagano', 'Samura|-Ichikawa', 'New Berlin', 'Stardrifter', 'Okinawa', 'The_Altair', 'Magellan', 'Tony.Sosa', 'Ontario', 'Wilde.RNC-Nestor', 'Omega-7'] 

Почему это? Я не вижу причин, почему это должно произойти.

+5

'игроки = системы = [] 'означает, что они такие же список. Если вы хотите, чтобы однострочный игрок делал 'игроки, системы = [], []'. Или вы можете разбить его на две линии. –

ответ

6

Не делайте этого, они будут ссылаться на тот же список:

players = systems = [] #Define lists 

Но разделить их:

players = [] 
systems = [] #Define lists 

Тогда у вас будет два отдельных списка.

Ваш стиль используется для создания псевдонимов из списка (в некоторых случаях это может быть полезно), не создать два различных списка

+0

Ах да, конечно, это было глупо от меня: D Спасибо! – Grinchell

+0

@Biggles отлично! Рад, что вы нашли ответ полезным. ;) – Ian

2

, где у вас есть players = systems = [] изменения его разделение заданий.

players = [] 
systems = [] 
2

Если вы хотите, чтобы держать его в одной строке:

players, systems = [], [] 
Смежные вопросы