добавить в список в кортеже с поиском в python

у меня есть класс (cls) с двумя основными строками (str1, str2) и списком строк (strlist >)

python превращает список строк в кортеж, поэтому, когда я хочу добавить к нему, я использую

tmp=list(strlist)
tmp.append(addToList)
self.list=tmp

может не лучший вариант, но это единственный, который я мог сделать с низким знанием python

теперь я все усложняю, у меня есть список cls (clslist), и я хочу добавить еще одну строку в список строк, где str1 = A && str2 = B

как создать поиск, который будет искать совпадение в списке clslist и, если он будет найден, добавит новую строку в список строк

ИЗМЕНИТЬ 1

class cls ():
    def __init__ (self,str1,str2,strlist):
        self.str1 = str1
        self.str2 = str2 
        self.strlist = strlist

и главное

def main():
    clslist =[]
    clslist.append(cls ("aaa","bbb",("123","456"))

я хочу найти cls в clslist, где str1 = aaa и str2 = bbb, а затем добавить еще одну строку в список str

так что я закончу так ("aaa", "bbb", ("123", "456", "789"))


person Iakovl    schedule 14.11.2012    source источник
comment
Что такое A и B? Вы также говорите 'python превращает список строк в кортеж', где и почему? Пожалуйста, опубликуйте свой класс, иначе очень сложно понять, что происходит.   -  person Gareth Latty    schedule 14.11.2012
comment
@Lattyware A и B также являются строками   -  person Iakovl    schedule 14.11.2012


Ответы (2)


Поскольку clslist не отсортирован, ваш поиск должен быть линейным.

Например:

for i in clslist:
    if i.str1 == A and i.str2 == B:
        i.strlist.append(whatever)
person Josh Heitzman    schedule 14.11.2012

Python не делает strlist кортежем, вы передаете кортеж. Если вам нужен список, просто используйте [] вместо ()

clslist.append(cls("aaa", "bbb", ["123","456"])

Поиск в вашем clslist прост

for item in clslist:
    if item.str1 == A and item.str2 == B:
        # do something
        item.strlist.append(otherstring)

Если вам действительно нужно расширить кортеж, вы можете сделать это следующим образом

>>> ("foo", "bar")+("baz",)
('foo', 'bar', 'baz')

, перед ) означает, что ("baz",) является кортежем, и вы можете добавлять кортежи. В отличие от list.append, при этом будет создан новый кортеж, поэтому он не так эффективен, поскольку требует копирования всех старых ссылок в новый кортеж.

person John La Rooy    schedule 14.11.2012
comment
дама, слишком много невежества с моей стороны ... нужно помнить, что нельзя играть с кодом в 3 часа ночи, спасибо за очистку [] () для меня - person Iakovl; 14.11.2012