为什么 python 中的条件 list.insert() 会向列表中添加其他项目

why does conditional list.insert() in python add additional items to list

h = list('camelCase')

for i in range(len(h)):
    if h[i].isupper():
        h.insert(i,' ')

print(h) returns: ['c', 'a', 'm', 'e', 'l', ' ', ' ', ' ', ' ', 'C', 'a', 's', 'e']

我预计:['c', 'a', 'm', 'e', 'l', ' ', 'C', 'a', 's', 'e']

因为只有一个大写字母“C”

你的问题是你正在迭代列表的范围,当你找到一个大写字母时,你在那个位置插入 space,这意味着大写字母将被移动到下一个位置,因此一旦您找到一个大写字母,它将简单地添加一个 space 并再次检查该字母。

您的 h[i] 现在将打印以下内容:

`c`, `a`, `m`, `e`, `l`, `C`, `C`, `C`, `C` 

我的建议是不要修改原始列表,而是在一个单独的列表中进行:

h = list('camelCase')
new_text = ''

for i in range(len(h)):
    if h[i].isupper():
        new_text += ' '
    new_text += h[i]

您需要先复制原始列表。

重复添加space字母的原因是列表h中添加了" "所以"C"被连续取到索引i达到原长度h.

h = list('camelCase')
a = h.copy()

for i in range(len(h)):
    if h[i].isupper():
        a.insert(i,' ')
print(a)

希望对您有所帮助。

更改您正在迭代的列表并不总是一个好主意,但如果您想将它应用到同一个列表上,您可以使用 while 循环:

h = list('camelCase')

i = 0
while (i < len(h)):
    if h[i].isupper():
        h.insert(i,' ')
        i += 1
    i += 1