我在使用其他列表替换完整列表时遇到问题。
例如,我们说我有一个包含单词['han','san']
的列表;
如何在[1,2]
发送其值以替换该列表中的han
和san
的其他列表?
i = [1,2]
p = ['han', 'san']
我希望将han
和san
替换为1
和2
。
答案 0 :(得分:1)
In [1]: i = [1,2]
In [2]: p = ['han', 'san']
In [3]: i[:] = p # replace all content of i with content of p
In [4]: i
Out[4]: ['han', 'san']
如果您有更长的列表,并且只想更换前两个:
In [5]: i = [1,2,3,4]
In [6]: p = ['han', 'san']
In [7]: i[:2] = p # replace just first two elements with contents of p
In [8]: i
Out[8]: ['han', 'san', 3, 4]
i[:]
语法选择整个列表,因此i[:] = p
会将p
中的每个元素添加到i
,如果您使用了i = p
i
将是对p
的引用,因此p中的任何更改都会在i
中反映为i is p
,它们都指向内存中的同一对象。
使用i[:2]
我们只选择i
较长版本的前两个元素,并将它们设置为p
的内容,如果p
有十个元素我们会向i
添加十个元素。使用[:]
语法进行分配时,右侧必须始终是可迭代的。
In [9]: id(i)
Out[9]: 140380204622192
In [10]: i[:] = p
In [11]: id(i) # still same object
Out[11]: 140380204622192
In [12]: i = p
In [13]: id(i) # now i is p
Out[13]: 140380204431624
In [14]: id(p)
Out[14]: 140380204431624
答案 1 :(得分:0)
map(lambda x:p[x-1],i)
是一种方式
答案 2 :(得分:0)
使用如下操作:
p = d
适用于您的示例,但它会将一个列表替换为另一个列表,而不是将每个项目替换为另一个列表的项目。您可以尝试前面提到的Joran Beasley的方法:
map(lambda x: p[x - 1], i)
或者你可以定义一个函数:
def replace_list(old_list, new_list):
for x in range(len(old_list)):
old_list[x] = new_list[x]
正如您所看到的,有多种方法可以替换列表中的项目,您的选择实际上取决于您的程序。希望这有帮助!