Я пытаюсь изучить списки Python.В этом коде я пытаюсь добавить строку s
из формы в строку таблицы, если строка совпадает.Когда строка отличается;новая строка записывается в следующий столбец.
Я мог бы написать строку с column 0
до column 1
, но у меня были проблемы с добавлением этой же строки на column 1
правильно.
так оно и есть;скрипт работает только до помещения другой строки в следующий столбец.
Я понимаю, что это неправильный способ сделать это.
Буду признателен за любую помощь.Спасибо.Я также включил шаблон.
РЕДАКТИРОВАТЬ2
@ JerseyMike: Спасибо за ваш ответ.Я пока не понимаю, как работает AddString(str)
, но пробуя его в IDLE, я заметил, что вместо добавления новой строки он заменяет ее новой строкой.Как я уже сказал, я еще не изучал, как это работает;но вот результат (я изменил str
на str1
):
>>> def AddString(str1):
try:
idx = map(lambda (s, v): ('N', 'Y')[s == str1], L).index('Y')
except:
L.append((str1, 1))
else: L[idx] = (str1, L[idx][1] + 1)
>>> L = []
>>> str1 = 'hello'
>>> AddString(str1)
>>> L
[('hello', 1)]
>>> AddString(str1)
>>> L
[('hello', 2)]
>>>
РЕДАКТИРОВАТЬ
@ JerseyMike:
Спасибо,Извините, я понял, что вопрос не ясен.В этом приложении;пользователь печатает в одном предложении;люблю заниматься иностранным языком.Таким образом, ввод будет
Hello world
Hello world
Hello world
, и если пользователь введет в следующем «Hello Universe», то он перейдет в следующий столбец:
Hello world Hello Universe
Hello world
Hello world
и если пользователь продолжит вводить «Hello»Вселенная "они должны идти под одним столбцом
Hello world Hello Universe
Hello world Hello Universe
Hello world Hello Universe
Hello Universe
Hello Universe
Список L, содержащий это выглядит следующим образом:
L = [
['Hello world', 'Hello Universe'],
['Hello world', 'Hello Universe'],
['Hello world', 'Hello Universe'],
['', 'Hello Universe'],
['', 'Hello Universe']
]
Изначально список пуст, и я добавляю строку s
сL.append(s)
.
L = [
['Hello world'],
['Hello world'],
['Hello world'],
]
Если последняя строка s
не соответствует новому вводу, я создаю новый столбец с L[0].insert(1,s)
.
L = [
['Hello world', 'Hello Universe'],
['Hello world'],
['Hello world'],
]
Теперь мне нужно написатьпод 'Hello Universe'
Мне оказалось трудно это понять по нескольким причинам.Но теперь я думаю, что может быть лучше добавить новую строку s
в список, прежде чем проверять, совпадает ли она с предыдущей строкой.Для упрощения списка предположим, что L
выглядит следующим образом:
L = [['A'], ['A'], ['A'], ['B']]
Теперь ['B']
необходимо вставить в L[0]
.Для этого я ищу в списке слева последний подсписок с 1 элементом (или что-то в этом роде).Я еще не изучал, как искать списки.Еще раз спасибо за помощь.
END EDİT
class Test(webapp.RequestHandler):
myList = []
def get(self):
# del self.myList[:]
s = [self.request.get('sentence')]
r = len(self.myList)
if r == 0:
self.myList.append(s)
htmlcode1 = HTML.table(self.myList)
lastItem = s
else:
if len(self.myList[0]) == 1:
lastItem = self.myList[r-1]
if s == lastItem:
self.myList.append(s)
htmlcode1 = HTML.table(self.myList)
else:
s = self.request.get('sentence')
self.myList[0].insert(1,s)
htmlcode1 = HTML.table(self.myList)
if len(self.myList[0]) == 2:
self.myList[1].insert(1,s)
htmlcode1 = HTML.table(self.myList)
elif len(self.myList[1]) == 2:
self.myList[2].insert(1,s)
htmlcode1 = HTML.table(self.myList)
template_values = {'htmlcode1': htmlcode1,
's': s,
'r': r,
'myList': self.myList,
# 'myListLen': myListLen,
'lastItem': lastItem,
}
path = os.path.join(os.path.dirname(__file__), 'test.mako')
templ = Template(filename=path)
self.response.out.write(templ.render(**template_values))
Шаблон
<html>
<head>
</head>
<body>
<p>| <a href="/delete">CLEAR</a> |</p>
<form action="/test" method="get">
<input name="sentence" type="text" size="30"><br />
<input type="submit" value="Enter">
</form>
<p>${htmlcode1}</p>
<p>s: ${s}</p>
<p>r: ${r}</p>
<p>myList: ${myList}</p>
<p>lastItem: ${lastItem}</p>
</html>
</body>