Я думал, что с python я был достаточно хорош, но эта проблема меня превзошла.Проблемы с доступом к определенному элементу списка
Следующий код работает
import csv
f = open("potholes.csv")
count = 0
for row in csv.DictReader(f):
addr_bits = row['STREET ADDRESS'].split()
street_num = addr_bits[0:1]
count += 1
print type(addr_bits)
print addr_bits
print street_num
print "completed processing " + str(count) + " records"
ВЫВОД:
<type 'list'>
['2519', 'S', 'HALSTED', 'ST']
['2519']
completed processing 378033 records
Этот код однако дает ошибку
import csv
f = open("potholes.csv")
count = 0
for row in csv.DictReader(f):
addr_bits = row['STREET ADDRESS'].split()
street_num = addr_bits[0]
count += 1
print type(addr_bits)
print addr_bits
print street_num
print "completed processing " + str(count) + " records"
ВЫВОД:
Traceback (most recent call last):
File "/home/linux/PycharmProjects/potholes/potholes", line 7, in <module>
street_num = addr_bits[0]
IndexError: list index out of range
Process finished with exit code 1
Единственное отличие состоит в том, что первый код, используемый [0: 1] для доступа к этому списку, использовал вторую часть [0], но я думал, что это законный способ доступа к списку.
Если 'вещь [0]' 'является IndexError', то' thing' нулевой длины. 'thing [: 1]' ('0' - старт по умолчанию) все равно будет работать, но также будет равна нулю; '[] [: 1] == []'. – jonrsharpe
У вас есть пустая строка, используйте 'if addr_bits: street_num = addr_bits [0]', они оба возвращают разные вещи, поэтому код не сопоставим, первый возвращает список, разделяя второй на один элемент, поэтому даже без ошибки ваш код не тот же –