所以我的程序要求用户输入字符串列表然后整理字符串,如果第一个字母在同一个字符串中再次重复,它会将其存储到另一个列表中。这是我到目前为止所拥有的。
iput = []
i = 0
final = []
while i < 1:
iput += [input('Enter words here: ')]
if not iput[-1]:
i += 1
i = 0
z = 1
while i < len(iput) - 1:
print(i)
while iput[i][0] != iput[i][z]:
if z == len(iput[i]):
break
z += 1
i += 1
print(final)
print(iput)
我不断收到#34;字符串索引超出范围&#34;错误,并且无法想出添加具有上述要求的字符串的方法。有什么建议吗?
答案 0 :(得分:0)
您的z
将增长到超过iput
长度的值。
当z
达到iput
的长度时,你会破坏内循环,但永远不会在外循环中重置它。
答案 1 :(得分:0)
您的代码将首先访问越界索引,然后检查索引是否超出范围。在访问越界索引之前进行检查。
while i < len(iput) - 1:
print(i)
while z != len(iput[i]) and iput[i][0] != iput[i][z]:
z += 1
i += 1
答案 2 :(得分:0)
因为您应该检查所有elemtns的每个list元素,所以你应该在每个while循环中重置z
,所以添加:
z = 1
:
while i < len(iput) - 1:
print(i)
while iput[i][0] != iput[i][z]:
if z == len(iput[i]):
break
z += 1
z = 1
i += 1
答案 3 :(得分:0)
大约z
变得太大了:在检查iput[i][z]
是否等于z
之前,您会继续在循环中递增它但访问iput[i]
。一旦它相等,那就太晚了:Python字符串索引是从0开始的,这意味着你的z
最多可能变为len(iput[i]) - 1
。
虽然这是对你的代码中实际发生的事情的分析,但是我要说这段代码非常简单,因为它解释了许多机械细节,为这种错误提供了机会。 Python中有一些语言结构,可以让你更简洁地表达相同的内容(也更有效)。
iput = []
final = []
while True:
iput += [input('Enter words here: ')]
if not iput[-1]:
break
for i, line in enumerate(iput):
print(i)
for c in line[1:]:
if c == line[0]:
final.append(line)
break
print(final)
print(iput)
更多的Pythonic,但不那么让人联想到你的算法:
final = [line for line in iput if line[0] in line[1:]]