gpt4 book ai didi

python - 函数定义 : Matching Area Codes to Phone Numbers

转载 作者:太空宇宙 更新时间:2023-11-04 03:25:30 25 4
gpt4 key购买 nike

如果我想定义一个名为 match_numbers 的函数,它将一个列表中的区号与另一个列表中的电话号码相匹配,我应该如何修复我的代码?例如:

match_phone(['666', '332'], ['(443)241-1254', '(666)313-2534', '(332)123-3332'])

会给我

(666)313-2534
(332)123-3332

我的代码是:

def phone (nlist, nlist1):
results = {}
for x in nlist1:
results.setdefault(x[0:3], [])
results[x[0:3]].append(x)
for x in nlist:
if x in results:
print(results[x])

然而,这段代码的问题是:

  1. 它给我括号中的输出,而我希望它打印如上所示逐行输出,和
  2. 它不适用于第二个列表中的括号(例如(666)543-2322 必须转换为 666-543-2322 才能将列表转换为工作。

最佳答案

现在,有更好/更快的方法来完成您想要做的事情,但让我们专注于修复您的代码。

您遇到的第一个问题是如何对字符串进行切片。请记住,您从索引 0 开始。因此,如果您这样做:

x[0:3]

你实际上从你的字符串中得到的是这样的:

(12

而不是你想要的:

123

因此,知道索引从 0 开始,您真正想要做的是将您的字符串切片:

x[1:4]

最后,你的台词在这里:

results[x[0:3]].append(x)

这里有两个问题。

首先,如上所述,您仍在尝试对字符串的错误部分进行切片,因此请修复它。

其次,由于您正在尝试创建一个键值对,所以上面那行实际上是在创建一个键值对,其中的值是一个列表。我认为你不想那样做。你想做这样的事情:

{'123': '(123)5556666'}

因此,您不想在这种情况下使用追加。您要做的是直接将字符串分配为该键的值。你可以这样做:

results[x[1:4]] = x

最后,注意到的另一个问题是您在这里所做的事情:

results.setdefault(x[1:4], [])

根据上面关于您希望如何将字符串作为您的值而不是列表存储在字典中的解释,因此您不需要这样做。因此,您应该简单地删除该行,它对您要执行的操作没有任何作用。您已经将字典初始化为 results = {}

当你将它们放在一起时,你的代码将如下所示:

def match_phone(nlist, nlist1):
results = {}
for x in nlist1:
results[x[1:4]] = x
for x in nlist:
if x in results:
print(results[x])

match_phone(['666', '332'], ['(443)241-1254', '(666)313-2534', '(332)123-3332'])

并将提供以下输出:

(666)313-2534
(332)123-3332

关于python - 函数定义 : Matching Area Codes to Phone Numbers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33187779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com