Форум сайта python.su
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],
Офлайн
мда…
sp = []
for stroka in f1.readlines():
sp.append(stroka.split())
print sp
Отредактировано (Сен. 8, 2010 14:59:15)
Офлайн
спасибо огромное))) видимо, мне ещё многому учиться нужно
но у меня возникла ещё одна трудность
в некоторых строках не по три слова, а по два
естественно при обращении к этому элементу по индексу возникает ошибка
если ли способ сделать так, чтобы при преобразовании строк с двумя словами в массив
образовывался бы массив не из двух элементов, а из трёх последний из которых пуст
Офлайн
можно так:
for line in f.readlines():
if len(line.split())!=3:
sp.append(line.split().append(""))
else:
sp.append(line.split())
print sp
Офлайн
спасибо)
только так как вы написали, не добавлялся ещё один элемент в строку из двух слов, а появлялось 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
Офлайн
А зачем split два раза вызывать? может так проще:
sp = []
for stroka in f1.readlines():
sp.append(stroka.split())
while 3 > len(sp[-1]): # на случай, если попадется строка с одним словом :)
sp[-1].append("")
print sp
Офлайн
о.. классно) спасибо)))
Офлайн
Без цикла
sp = []
for stroka in f1.readlines():
lst = stroka.split()
sp.append(lst + ['']*(3-len(lst) ) )
print sp
Офлайн
Или в одну строчку:
print [item + ['']*(3-len(item)) for item in (stroka.split() for stroka in f1.readlines()) ]
Офлайн
Кстати, функция f1.readlines() читает весь файл в память. Чтобы этого не было, надо вместо
for stroka in f1.readlines()
for stroka in f1
print [ item + ['']*(3-len(item)) for item in (line.split() for line in f1) ]
Офлайн