#python #list #reduce #similarity
#python #Список #уменьшить #сходство
Вопрос:
Используя python, в следующем списке мне нужно удалить телефонные номера, которые повторяются с кодами стран.
['( 44)45860787163','( 27)16345860787','45860787163','16345860787']
Я попытался использовать декартово произведение и оператор ‘in’ для сравнения строк, но, похоже, ничего не работает.
Я бы хотел сохранить полные номера телефонов.
['( 44)45860787163','( 27)16345860787']
Комментарии:
1. У вас есть строка со списком в ней или список строк?
2. У меня это как список строк
3. приведенный вами пример — это строка? он заключен в
''
4. Я предложил редактировать список строк, предполагая, что это была опечатка.
5. вы пробовали решение для регулярных выражений?
Ответ №1:
Используя регулярное выражение, вы можете извлечь нужную вам часть, затем, используя dict, вы можете связать число с его префиксом (и избежать перезаписи префикса)
value = '( 44)45860787163,( 27)16345860787,45860787163,16345860787'
phones = {}
for phone, prefix, number in re.findall(r"((( d ))?(d ))", value):
if prefix != "" or number not in phone:
phones[number] = prefix
result = ",".join(v k for k, v in phones.items())
print(result) # ( 44)45860787163,( 27)16345860787
Ответ №2:
Использование понимания списка
l = ['( 44)45860787163','( 27)16345860787','45860787163','16345860787']
l = [x for x in l if '(' in x]
print(l)
>>> ['( 44)45860787163', '( 27)16345860787']
Если вы хотите быть в большей безопасности, вы можете проверить наличие обеих точек с запятой
l = [x for x in l if '(' in x and ')' in x]
Комментарии:
1. OP хочет сохранить телефонные номера с
( xx)
. Это делает обратное2. Это была моя первая мысль о том, как подойти к этому, но я думаю, что OP хочет вернуть числа с кодами областей
Ответ №3:
Прежде всего, мы получаем все телефонные номера. Затем мы создаем словарь с номером без расширения в качестве ключа и расширением в качестве значения. Если число не имеет расширения, ему присваивается значение None. После, если мы найдем тот же номер с расширением, Ни один из них не будет заменен расширением. В конце мы печатаем номер с соответствующим расширением.
numbers = '( 44)45860787163,( 27)16345860787,45860787163,16345860787'.split(',')
d = dict()
for number in numbers:
if ')' in number:
prefix, n = number.split(')')
prefix = prefix ')'
else:
prefix = None
n = number
if n in d.keys():
if d[n] == None:
d[n] = prefix
else:
d[n] = prefix
print([k if v == None else v k for k,v in d.items()])
Ответ №4:
Вы можете использовать это решение:
number_string = '( 44)45860787163,( 27)16345860787,45860787163,16345860787'
result = []
for phone_number in number_string.split(','):
if "(" in phone_number:
result.append(phone_number)
print(result)