索引列表以查找字符串中的重复字符(Python)

时间:2016-02-19 21:52:41

标签: python string list python-3.x indexing

所以我的程序要求用户输入字符串列表然后整理字符串,如果第一个字母在同一个字符串中再次重复,它会将其存储到另一个列表中。这是我到目前为止所拥有的。

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;错误,并且无法想出添加具有上述要求的字符串的方法。有什么建议吗?

4 个答案:

答案 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循环后

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:]]