我一直在搜索论坛,但没有运气这个,我希望它是一个简单的,基本上我想修改一个列表中的字符串从每个参数的12个字符开始。这是清单:
[' address 0 201.175.131.20 0', ' address 2 4.2.2.2 0', ' address 0 107.22.0.0 0.0.255.255']
我期待这样的事情:
address[0][11:] = "192.168.10.1"
但它说:
TypeError: 'str' object does not support item assignment
任何想法我如何实现它。
由于
答案 0 :(得分:1)
字符串是不可变的 - 一旦创建它们就无法更改 - 字符串切片也是如此,它们也是字符串。
您必须使用应保留的切片部分构建 new 字符串,然后替换索引0处的前一个字符串对象:
address[0] = address[0][:11] + "192.168.10.1"
print address
# [' address 0 192.168.10.1', ' address 2 4.2.2.2 0', ' address 0 107.22.0.0 0.0.255.255']
要在列表中复制此内容,请使用列表理解:
address = [s[:11] + "192.168.10.1" for s in address]
答案 1 :(得分:0)
字符串是不可变的,但在这里你可以更新列表。
您可以通过创建新字符串来更新列表项。
>>> lista = [' address 0 201.175.131.20 0', ' address 2 4.2.2.2 0', ' address 0 107.22.0.0 0.0.255.255']
>>> lista[0] = lista[0][:11] + "192.168.10.1"
>>> lista
[' address 0 192.168.10.1', ' address 2 4.2.2.2 0', ' address 0 107.22.0.0 0.0.255.255']
改变你的清单:
[ip[:11] + "192.168.10.1" for ip in lista]
拉出所有的ip:
>>> [ip.split(" ")[3] for ip in lista]
['201.175.131.20', '4.2.2.2', '107.22.0.0']
答案 2 :(得分:0)
与元组一样,字符串在Python中是不可变的。这意味着你不能在适当的位置更改它们(好吧,几乎,你可以连接到一个字符串)。您需要生成一个新列表。使用地图的一种方法:
map(lambda x: x[:12]+'whatever', yourlist)
创建新字符串的任何解决方案都可以使用,但您必须创建一个新字符串。