Python 从列表中删除相似的项目
Python remove similar items from list
使用 python,在下面的列表中,我需要删除与国家代码重复的 phone 个号码。
['(+44)45860787163','(+27)16345860787','45860787163','16345860787']
我尝试使用笛卡尔积和 'in' 运算符来比较字符串,但似乎没有任何效果。
我想保留的是完整的 phone 数字。
['(+44)45860787163','(+27)16345860787']
使用列表理解
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]
使用 regex 你可以提取你需要的部分,然后使用字典,你可以将数字与其前缀配对(并避免覆盖前缀)
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
首先,我们得到所有的phone个数字。然后,我们创建一个字典,没有扩展名的数字作为键,扩展名作为值。如果号码没有分机号,则设置为 None。之后,如果我们发现扩展名相同的号码 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()])
您可以使用此解决方案:
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)
使用 python,在下面的列表中,我需要删除与国家代码重复的 phone 个号码。
['(+44)45860787163','(+27)16345860787','45860787163','16345860787']
我尝试使用笛卡尔积和 'in' 运算符来比较字符串,但似乎没有任何效果。 我想保留的是完整的 phone 数字。
['(+44)45860787163','(+27)16345860787']
使用列表理解
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]
使用 regex 你可以提取你需要的部分,然后使用字典,你可以将数字与其前缀配对(并避免覆盖前缀)
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
首先,我们得到所有的phone个数字。然后,我们创建一个字典,没有扩展名的数字作为键,扩展名作为值。如果号码没有分机号,则设置为 None。之后,如果我们发现扩展名相同的号码 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()])
您可以使用此解决方案:
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)