gpt4 book ai didi

Python 列表内替换

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:06 25 4
gpt4 key购买 nike

意图:在一个变量集合中,如果任何变量恰好是一个字符串,则拆分为“;”并将其列为 list 。我已尝试使用以下代码,但它不起作用。

我原以为 l2 是 ["3", "4"] 但它仍然是 "3;4"

请看一下,请解释如何循环遍历列表变量并将它们替换到位:

>>> l1 = ["1" ,"2"]
>>> l2 = "3;4"
>>> l3 = ["5", "6"]
>>>
>>> for x in [l1, l2, l3]:
print("Working on: {}".format(x))
if isinstance(x, basestring):
x = x.split(";")
print("New x: {}".format(x))
else:
print("Its same")


Working on: ['1', '2']
Its same
Working on: 3;4
New x: ['3', '4']
Working on: ['5', '6']
Its same
>>> l1, l2, l3
(['1', '2'], '3;4', ['5', '6'])

预期值:

>>> l1, l2, l3
(['1', '2'], ['3', '4'], ['5', '6'])

最佳答案

Python 中的字符串是不可变的——它们不能就地改变。因此:

x = x.split(";")

创建一个新对象(一个列表)并将其分配给名称x,但没有 更改正在迭代的列表。不过,在这种情况下,即使您更改了列表l2 仍会引用原始的 str 对象。

在 Python 中,名称是对对象的引用 - [l1, l2, l3] 仅表示一个列表,其第一个索引引用当前由名称 l1 引用的对象,并且等等。

你可以把它变成一个函数:

def splitter(x):
print("Working on: {}".format(x))
if isinstance(x, basestring):
x = x.split(";")
print("New x: {}".format(x))
else:
print("It's the same")
return x

然后你可以这样做:

l1 = splitter(l1)
l2 = splitter(l2)
l3 = splitter(l3)

然后得到你想要的结果。

或者,将列表解压缩回名称(此处使用列表理解):

l1, l2, l3 = [splitter(x) for x in [l1, l2, l3]]

(或者,从长远来看)

vals = [l1, l2, l3] # create list
for i, x in enumerate(vals): # iterate through list
vals[i] = splitter(x) # modify list
l1, l2, l3 = vals # unpack list

关于Python 列表内替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23080585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com