Похоже, вы пытаетесь сравнить старый список доменных имен с новым списком доменных имен.После того, как эти списки были построены, вы хотите увидеть, есть ли общность между списками.
В этом случае, я думаю, set()
предлагает гораздо более богатые функциональные возможности, которые делают вашу жизнь проще,Пример:
>>> olddomains = set(['www.cisco.com', 'www.juniper.com', 'www.hp.com'])
>>> newdomains = set(['www.microsoft.com', 'www.cisco.com', 'www.apple.com'])
>>> olddomains.intersection(newdomains)
set(['www.cisco.com'])
>>>
>>> 'www.google.com' in newdomains
False
>>>
Переписывание части вашего кода для использования набора будет выглядеть так:
# retain newlist, since that's the output from csv...
for row in newlist:
olddomain = set([])
domain = row[0]
olddomain.add(domain.lower()) # use lower() to ensure no CAPS mess things up
for item in olddomain:
print item
И код, о котором вы спрашивали:
if olddomain.intersection(newdomain) == set([]):
print "no match"
else:
print "match"
Общее правило, которое я использую при определении, использую ли я set()
или list()
:
- Если сохранение порядка элементов имеет значение (включая возможность доступа к ним с помощью индекса),используйте
list()
- В любом другом случае используйте
set()
РЕДАКТИРОВАТЬ
СВы спрашиваете, почему код, который я разместил, выдает TypeError
, если вы присваиваете row
таким же образом, как я, тогда вам нужно использовать row[0]
вместо row[0:]
>>> row = ['example.com', '', 'excomment', 'Parked Page']
>>> row[0:]
['example.com', '', 'excomment', 'Parked Page']
>>> row[0]
'example.com'
>>>
Я изменил свой пример, чтобы отразить это, так как подозреваю, что именно в этом заключается проблема.