KRB*_*KRB 4 python string list
我有一个列表列表如下:
list=[]
*some code to append elements to list*
list=[['a','bob'],['a','bob'],['a','john']]
Run Code Online (Sandbox Code Playgroud)
我想查看此列表并将所有 'bob' 实例更改为 'b' 并保持其他实例不变。
for x in list:
for a in x:
if "bob" in a:
a.replace("bob", 'b')
Run Code Online (Sandbox Code Playgroud)
打印出 x 后,它仍然与 list 相同,但不是如下:
list=[['a','b'],['a','b'],['a','john']]
Run Code Online (Sandbox Code Playgroud)
为什么更改没有反映在列表中?
因为str.replace不能就地工作,它返回一个副本。作为不可变对象,您需要将字符串分配给列表列表中的元素。
如果您通过enumerate以下方式提取索引整数,您可以直接分配给您的列表列表:
L = [['a','bob'],['a','bob'],['a','john']]
for i, x in enumerate(L):
for j, a in enumerate(x):
if 'bob' in a:
L[i][j] = a.replace('bob', 'b')
Run Code Online (Sandbox Code Playgroud)
结果:
[['a', 'b'], ['a', 'b'], ['a', 'john']]
Run Code Online (Sandbox Code Playgroud)
更多的 Pythonic 是使用列表理解来创建一个新列表。例如,如果只有两个值中的第二个包含需要检查的名称:
L = [[i, j if j != 'bob' else 'b'] for i, j in L]
Run Code Online (Sandbox Code Playgroud)