为什么 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
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