列表未正确切片

时间:2019-01-19 04:36:11

标签: python

菜鸟在这里。 我目前在python中切片列表时遇到问题。 我当前的代码如下。

lines = ['0', '1', '2', '3', '4', '5', '6']

lines[0:4] = ' _ '
print(lines)

,输出为

[' ', '_', ' ', '4', '5', '6']

有时它甚至会将列表的长度更改为3或2。

为什么要这样做?我觉得应该很简单。

感谢您的帮助!

edit:对不起,如果我不清楚,我急着在开车上班之前写这篇文章。我想要的输出将是所有索引位置,例如0:5将成为字符串“ _”。像这样[[_','_','_','_','',''] 希望可以将其清除更多

3 个答案:

答案 0 :(得分:0)

字符串'_实际上只是一个字符数组[' ', '_', ' ']

因此,lines[0:4] = ' _ '将行的第一个元素设置为'',将第二个元素设置为'_',第三个元素设置为''。这说明了您正在目睹的行为。

如果要使列表的前三个元素为'_,我建议对每个要替换为该字符串的索引i进行lines[i] = ' _ '。如果使用库函数,可能有一种单行方法。

for i in range(4):
     lines[i] = ' _ '

答案 1 :(得分:0)

如果您要使用_

替换“开始4”元素

然后尝试

lines = ['0', '1', '2', '3', '4', '5', '6']
for idx,value in enumerate(lines[0:4]):
    lines[idx]="_"
print(lines)

如果您要单线解决方案,请尝试

lines = ['0', '1', '2', '3', '4', '5', '6']
lines=["_" if 0 <= idx <= 3 else v for idx,v in enumerate(lines) ]
print(lines)

答案 2 :(得分:0)

只能将切片分配给可迭代对象。字符串是唯一的,因为它既可以是单个对象,也可以是可迭代的字符列表。当切片分配要求可迭代时,它将获取替换字符串中的各个字符。

我对您的结果感到惊讶,但是背后有逻辑。

我认为可以通过以下方式获得期望的结果

lines[0:4] = [' - ']

编辑:您的问题尚不清楚,通过编辑看来您希望将4个元素替换为其他4个元素。在这种情况下,替换必须包含4个元素:

lines[0:4] = [' - '] * 4