Можно ли ссылаться на объект из списка объектов? - PullRequest
0 голосов
/ 16 марта 2020

У меня есть список объектов следующей формы

a = [<__main__.Card at 0x10b47a630>,
     <__main__.Card at 0x10b47aba8>,
     <__main__.Card at 0x10b47ac18>,
     <__main__.Card at 0x10b47a588>,
     <__main__.Card at 0x10b47a0f0>,
     <__main__.Card at 0x10b47a208>]

Я могу вызвать один объект из списка;

print(a[0]) печатает <__main__.Card at 0x10b47a630>

Я хотел бы удалить один из объектов из списка, но не с использованием индекса, а путем вызова самого объекта.

a.remove(<__main__.Card at 0x10b47a630>)  # I think that the format in the bracket is wrong

Я знаю, что могу сделать это со строками:

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

a.remove('c')

a = ['a', 'b', 'z']

Однако я не понял, как это сделать в этом случае.

Я знаю, что могу сделать это так:

a.remove(a[0])

, но я не уверен в форме объекта, который должен go в .remove().

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Если предположить, что

a = [<__main__.Card at 0x10b47a630>,
     <__main__.Card at 0x10b47aba8>,
     <__main__.Card at 0x10b47ac18>,
     ...

- это вывод print a, тогда <__main__.Card at 0x10b47aba8> - это просто строковое представление по умолчанию для объекта , а не то, что вы можете использовать для ссылаться на объект в коде.

Если объект, который вы хотите удалить, имеет какой-то параметр, который его отличает, вы можете сделать следующее:

obj_to_remove = [obj for obj in a if obj.birthmark == "a mole"][0]
a.remove(obj_to_remove)

, где obj.birthmark - это отличительная характеристика c "a mole" - это значение, обозначающее объект, который вы хотите удалить.

альтернативно, вы можете использовать приведенное выше понимание списка, чтобы удалить объект, не используя remove:

a = [obj for obj in a if obj.birthmark != "a mole"]
0 голосов
/ 17 марта 2020

любая переменная, которой назначен элемент из списка объектов, фактически ссылается на этот объект, вот пример того, как вы можете удалить объект из списка объектов без использования индекса:

from random import choice


class Test:
    def __init__(self, x):
        self.x = x
    def __repr__(self):
        return f'Test(x={self.x})'

l = [Test(i) for i in range(5)]
print(l)

obj = choice(l)
print(obj)
l.remove(obj)
print(l)

вывод:

[Test(x=0), Test(x=1), Test(x=2), Test(x=3), Test(x=4)]
Test(x=1)
[Test(x=0), Test(x=2), Test(x=3), Test(x=4)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...