Найти - Пользователи
Полная версия: Заполнение двумерного массива
Начало » Python для новичков » Заполнение двумерного массива
1
lyncs
f1.readlines() представляет собой список из строк, по три слова в каждой
мне нужно получить двумерный массив, каждым элементом которого является слово
sp1 = f1.readlines()
sp2 = range(n)
for i in range(n):
sp2[i] = range(3)

for i in range(n):
sp2 = sp1[i].split()
for j in range(3):
sp1[i][j] = sp2[j]#ошибка 'str' object does not support item assignment

for i in range(n): #вывод массива на экран
for j in range(3):
print sp1[i][j],
print
подскажите, пожалуйста, как исправить ошибку
Alex2ndr
мда…
sp = []
for stroka in f1.readlines():
sp.append(stroka.split())
print sp
lyncs
спасибо огромное))) видимо, мне ещё многому учиться нужно

но у меня возникла ещё одна трудность
в некоторых строках не по три слова, а по два
естественно при обращении к этому элементу по индексу возникает ошибка
если ли способ сделать так, чтобы при преобразовании строк с двумя словами в массив
образовывался бы массив не из двух элементов, а из трёх последний из которых пуст
Vader
можно так:
for line in f.readlines():
if len(line.split())!=3:
sp.append(line.split().append(""))
else:
sp.append(line.split())
print sp
lyncs
спасибо)
только так как вы написали, не добавлялся ещё один элемент в строку из двух слов, а появлялось None между строками

вот так всё работает отлично:
sp = []
k = []
for stroka in f1.readlines():
if(len(stroka.split())!=3):
k = stroka.split()
k.append("")
sp.append(k)
else:
sp.append(stroka.split())
print sp
pyuser
А зачем split два раза вызывать? может так проще:
sp = []
for stroka in f1.readlines():
sp.append(stroka.split())
while 3 > len(sp[-1]): # на случай, если попадется строка с одним словом :)
sp[-1].append("")
print sp
lyncs
о.. классно) спасибо)))
Isem
Без цикла

sp = []
for stroka in f1.readlines():
lst = stroka.split()
sp.append(lst + ['']*(3-len(lst) ) )
print sp
Isem
Или в одну строчку:
print [item + ['']*(3-len(item)) for item in (stroka.split() for stroka in f1.readlines()) ]
Isem
Кстати, функция f1.readlines() читает весь файл в память. Чтобы этого не было, надо вместо
for stroka in f1.readlines()
писать

for stroka in f1
так как f1 сам является итератором строк.
То есть конечный вариант:

print [ item + ['']*(3-len(item)) for item in (line.split() for line in f1) ]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB