回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在学习Python列表。在这段代码中,我尝试添加一个字符串<code>s</code>,它来自于表单到表的行,只要字符串是相同的。当字符串不同时,新字符串将写入下一列。在</p>
<p>我可以将字符串从<code>column 0</code>写入<code>column 1</code>,但在<code>column 1</code>上添加相同的字符串时遇到了问题。在</p>
<p>实际上,脚本只在将不同的字符串放到下一列时起作用。在</p>
<p>我意识到这样做是不对的。在</p>
<p>我会很感激你的帮助。谢谢您。我也包括模板。在</p>
<p><strong>编辑2</strong></p>
<p>@JerseyMike:谢谢你的回答。我还不明白<code>AddString(str)</code>是如何工作的,但在空闲状态下尝试它时,我发现它没有添加新字符串,而是用新字符串替换了它。正如我所说的,我还没有研究它是如何工作的;但以下是结果(我将<code>str</code>改为<code>str1</code>):</p>
<pre><code>>>> def AddString(str1):
try:
idx = map(lambda (s, v): ('N', 'Y')[s == str1], L).index('Y')
except:
L.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>((str1, 1))
else: L[idx] = (str1, L[idx][1] + 1)
>>> L = []
>>> str1 = 'hello'
>>> AddString(str1)
>>> L
[('hello', 1)]
>>> AddString(str1)
>>> L
[('hello', 2)]
>>>
</code></pre>
<p><strong>编辑</strong></p>
<p>@JerseyMike:</p>
<p>谢谢,对不起,我意识到问题不清楚。在这个应用程序中;用户输入同一个句子;喜欢练习外语。所以输入将是</p>
^{pr2}$
<p>如果用户在下一个“Hello universe”中键入,则会转到下一列:</p>
<pre><code>Hello world Hello Universe
Hello world
Hello world
</code></pre>
<p>如果用户继续输入“Hello Universe”,他们应该在同一列下</p>
<pre><code>Hello world Hello Universe
Hello world Hello Universe
Hello world Hello Universe
Hello Universe
Hello Universe
</code></pre>
<p>包含这个的列表如下:</p>
<pre><code>L = [
['Hello world', 'Hello Universe'],
['Hello world', 'Hello Universe'],
['Hello world', 'Hello Universe'],
['', 'Hello Universe'],
['', 'Hello Universe']
]
</code></pre>
<p>最初列表是空的,我用<code>L.append(s)</code>添加字符串<code>s</code>。在</p>
<pre><code>L = [
['Hello world'],
['Hello world'],
['Hello world'],
]
</code></pre>
<p>如果最后一个字符串<code>s</code>与新输入不匹配,我用<code>L[0].insert(1,s)</code>创建新列。在</p>
<pre><code>L = [
['Hello world', 'Hello Universe'],
['Hello world'],
['Hello world'],
]
</code></pre>
<p>现在我需要写在<code>'Hello Universe'</code>这对我来说很难理解,原因有几个。但现在我认为在检查新字符串是否与前一个字符串相同之前,最好将新字符串<code>s</code>追加到列表中。为了简化列表,假设<code>L</code>如下所示:</p>
<pre><code>L = [['A'], ['A'], ['A'], ['B']]
</code></pre>
<p>现在<code>['B']</code>需要插入<code>L[0]</code>。为此,我搜索左边的列表以找到最后一个子列表(或类似的内容)。我还没有研究如何搜索列表。再次感谢你的帮助。在</p>
<p><strong>结束</p>
<hr/>
<pre><code>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))
</code></pre>
<hr/>
<p><strong>模板</strong></p>
<pre><code><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>
</code></pre>