python - 替换嵌套列表python中的项目

标签 python nested-lists deep-copy

我正在尝试制作列表的重复列表,并在重复列表的嵌套列表中将一个元素更改为另一个元素,但我遇到了一些麻烦。 我是如何制作重复列表的:

order = [['yhjK', 'F'], 'gap', ['bcsA', 'F'], ['bcsB', 'F'], ['bcsZ', 'F'], 'gap', ['yhjK', 'R']]
#order_1 = list(order) #this makes the duplicate list as well
order_1 = []
for x in order:
    order_1.append(x)

我是如何改变元素的:

for item in order_1:
    for n,i in enumerate(item):
            if i=='R':
                    item[n]='F'
            if i=='F':
                    item[n]='R'

我想用“R”替换所有“F”,反之亦然。这实现了这一点,但原始列表“顺序”也发生了变化。我只想更改第二个列表,无法弄清楚我的代码有什么问题。

我得到的:

order = [['yhjK', 'R'], 'gap', ['bcsA', 'R'], ['bcsB', 'R'], ['bcsZ', 'R'], 'gap', ['yhjK', 'F']]
order_1 = [['yhjK', 'R'], 'gap', ['bcsA', 'R'], ['bcsB', 'R'], ['bcsZ', 'R'], 'gap', ['yhjK', 'F']]

我想要的:

order = [['yhjK', 'F'], 'gap', ['bcsA', 'F'], ['bcsB', 'F'], ['bcsZ', 'F'], 'gap', ['yhjK', 'R']]
order_1 = [['yhjK', 'R'], 'gap', ['bcsA', 'R'], ['bcsB', 'R'], ['bcsZ', 'R'], 'gap', ['yhjK', 'F']]

谢谢大家!

最佳答案

您在这里所做的是列表的浅拷贝,因此当您更改副本时,原始副本也会更改。你需要的是deepcopy

import copy
order = [['yhjK', 'F'], 'gap', ['bcsA', 'F'], ['bcsB', 'F'], ['bcsZ', 'F'], 
'gap', ['yhjK', 'R']]
order_1 = copy.deepcopy(order)

# Now changing order_1 will not change order
order_1[1] = ['TEST LIST']
print order[1] # Prints 'gap'
print order_1[1] # Prints '['TEST LIST']

关于python - 替换嵌套列表python中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11315236/

相关文章:

python Pandas DataFrame 复制(deep=False)vs 复制(deep=True)vs '='

python - 逐个构建 DataFrame 的最快方法是什么?

python - WAF 自动化 qt 配置

python - 将列表的列表转换为元组列表的列表

c# - 在c#中解析嵌套列表数据

javascript - 为什么JS不提供一种简单的方法来对对象执行深复制呢?

python - 自定义类实例复制

python - 告诉 pandas DataFrame 中缺失行的最佳方法是什么?

python - 语法错误 : positional argument follows keyword argument:

r - 通过逻辑索引向量对列表进行子集化