Эффективное объединение адресных строк - PullRequest
0 голосов
/ 13 сентября 2018

В моей базе данных хранятся некоторые стандартные поля адресных строк (адресная строка 1,2 .. Город, страна, почтовый индекс), и я хотел бы объединить их в человеческую форму.Я написал следующий код, но я не уверен, что это очень эффективно с кучей операторов if.(Написано на python, но мне важен алгоритм)

def human_readable_address(self):
    '''
    Return human readable address
    If address1 is empyty, return None
    '''
    addr = ""

    if(self.address1):
        addr += self.address1 + ", "
    else:
        return None

    if(self.address2):
        addr += self.address2 + ", "
    if(self.city):
        addr += self.city + ", "
    if(self.postal_code):
        addr += self.postal_code + ", "
    if(self.country):
        addr += self.country + ", "

    return addr

Что вы, ребята, думаете?Есть ли лучший способ?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

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

address_1 = "first"
address_2 = False
address_3 = "third"

def make_address(*args):
  return "".join(["%s,\n" % x for x in args if x])[:-2]

address = make_address(address_1, address_2, address_3)

print(address)

Как в: https://repl.it/repls/LiveJuniorLanservers

0 голосов
/ 13 сентября 2018

Вместо использования конкатенации строк (которая каждый раз создает новую строку) вы можете использовать str.join():

def human_readable_address(self):
    '''
    Return human readable address
    If address1 is empty, return None
    '''

    if not self.address1:
        return None

    parts = list(filter(None, [self.address1, self.address2, self.city,
                               self.postal_code, self.country]))
    return ', '.join(parts)
...