想从Python的列表中删除对象本身吗

2024-03-29 14:52:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编程很陌生,英语不好。即使我犯了错误也请理解。 这是我的问题,我想删除的对象是自窗体列表。 我怎样才能得到像第一次那样的结果呢 即使我切换到asd=ad\u material\u name2

我试过的是

ad_material_name=['a', 'b', 'c']
ad_material_name2=['a', 'b', 'c']

for aa in ad_material_name:  
    asd=['a', 'b', 'c']
    asd.remove(aa)
    print(asd)

结果是这样的

['b', 'c']
['a', 'c']
['a', 'b']

所以,我觉得这很管用。但是,当我尝试这个的时候

ad_material_name=['a', 'b', 'c']
ad_material_name2=['a', 'b', 'c']

for aa in ad_material_name:  
    asd=ad_material_name2
    asd.remove(aa)
    print(asd)

结果是这样的。你知道吗

['b', 'c']
['c']
[]

我想这可能是一个ad\u material\u name=['a','b','c']=ad\u material\u name2的问题 它是如何影响结果的。 所以,我试过这个。你知道吗

ad_material_name=['a', 'b', 'c']
ad_material_name2=['a', 'b', 'c', 'b']

for aa in ad_material_name:  
    asd=ad_material_name2
    asd.remove(aa)
    print(asd)

但是,结果是这样的

['b', 'c', 'd']
['c', 'd']
['d']

我怎样才能得到像第一次那样的结果呢 即使我切换到asd=ad\u material\u name2


Tags: 对象nameinfor编程错误窗体ad
3条回答

这是来自深度复制和浅复制的区别。 使用deepcopy可以解决您的问题。你知道吗

import copy
ad_material_name=['a', 'b', 'c']
ad_material_name2=['a', 'b', 'c', 'b']

for aa in ad_material_name:
    asd=copy.deepcopy(ad_material_name2)
    asd.remove(aa)
    print(asd)

您可以使用itertools中的combinations函数来获得相同的结果。你知道吗

from itertools import combinations

ad_material_name=['a', 'b', 'c']

for x, y in combinations(ad_material_name, r=2):
    print([x, y])

或者,如果需要创建ad\u material\u name2变量并为其指定排列,可以执行以下操作:

from itertools import combinations

ad_material_name=['a', 'b', 'c']

ad_material_name2 = [[*comb] for comb in combinations(ad_material_name, r=2)]

print(ad_material_name2)

# output
[['a', 'b'], ['a', 'c'], ['b', 'c']]

修改

asd=ad_material_name2

asd=ad_material_name2.copy()

这样“删除”操作就不会直接修改列表和材料名称2。你知道吗

相关问题 更多 >