我一直在玩 Python 中的字符串方法,我正在寻找一些帮助来理解以下行为:
I've been playing around with the strings method in Python and I was looking for some help in understanding the following behaviour:
如果我们在 Python 中考虑这个输入:
s="""David Smith 17,15,14,19
Melina Jackson 15,16,17,19
Charli Decker 14,15,18,15"""
如果我们将这个字符串分为 3 行,每行之间用“Enter”分隔,中间有一些 space,我们如何输出:
{
"David_Smith": 16.25,
"Melina_Jackson": 16.75,
"Charli Decker": 15.50
}
我希望结果是输入数字的平均值。
您可以做的是:
每隔 space 拆分字符串。它将创建一个包含每个人 3 个元素的列表:名字、姓氏和标记(我猜)
遍历列表。首先,我们将名字和姓氏连接成 Mark_Twain
。然后我们计算平均值。然后我们将这对添加到字典中
def calc_mean(numbers: list[int]) -> float:
"""calculate a mean"""
return sum(numbers) / len(numbers)
def extract_mean_from_string(s: str) -> dict:
arr = s.strip().split(" ")
means = {}
i = 0
while i < len(arr):
name = arr[i] + "_" + arr[i + 1]
string_numbers = arr[i + 2]
numbers = list(map(int, string_numbers.strip().split(",")))
means[name] = calc_mean(numbers)
i += 3
return means
# If we considered this input in Python:
s = """David Smith 17,15,14,19 Melina Jackson 15,16,17,19,20 Charli Decker 14,15,18 """
# I want to have this output:
expected = {"David_Smith": 16.25, " Melina_Jackson": 21.75, "Charli Decker": 15.75}
print(expected)
print(extract_mean_from_string(s))
{'David_Smith': 16.25, ' Melina_Jackson': 21.75, 'Charli Decker': 15.75}
{'David_Smith': 16.25, 'Melina_Jackson': 17.4, 'Charli_Decker': 15.666666666666666}
这些是正确的值。
根据您更改的问题回答
代码:
s = """David Smith 17,15,14,19
Melina Jackson 15,16,17,19
Charli Decker 14,15,18,15"""
lines = s.split('\n')
mydict = {}
for detail in lines :
newno = []
items = detail.split(' ')
nos = items[2].split(',')
for s in nos :
newno.append(int(s))
avg = float(sum(newno)/len(newno))
name = str(items[0])+' '+str(items[1])
mydict[name] = avg
print(mydict)
输出:
{'David Smith': 16.25, 'Melina Jackson': 16.75, 'Charli Decker': 15.5}
如果我们在 Python 中考虑这个输入:
s="""David Smith 17,15,14,19
Melina Jackson 15,16,17,19
Charli Decker 14,15,18,15"""
如果我们将这个字符串分为 3 行,每行之间用“Enter”分隔,中间有一些 space,我们如何输出:
{
"David_Smith": 16.25,
"Melina_Jackson": 16.75,
"Charli Decker": 15.50
}
我希望结果是输入数字的平均值。
您可以做的是:
每隔 space 拆分字符串。它将创建一个包含每个人 3 个元素的列表:名字、姓氏和标记(我猜)
遍历列表。首先,我们将名字和姓氏连接成
Mark_Twain
。然后我们计算平均值。然后我们将这对添加到字典中
def calc_mean(numbers: list[int]) -> float:
"""calculate a mean"""
return sum(numbers) / len(numbers)
def extract_mean_from_string(s: str) -> dict:
arr = s.strip().split(" ")
means = {}
i = 0
while i < len(arr):
name = arr[i] + "_" + arr[i + 1]
string_numbers = arr[i + 2]
numbers = list(map(int, string_numbers.strip().split(",")))
means[name] = calc_mean(numbers)
i += 3
return means
# If we considered this input in Python:
s = """David Smith 17,15,14,19 Melina Jackson 15,16,17,19,20 Charli Decker 14,15,18 """
# I want to have this output:
expected = {"David_Smith": 16.25, " Melina_Jackson": 21.75, "Charli Decker": 15.75}
print(expected)
print(extract_mean_from_string(s))
{'David_Smith': 16.25, ' Melina_Jackson': 21.75, 'Charli Decker': 15.75}
{'David_Smith': 16.25, 'Melina_Jackson': 17.4, 'Charli_Decker': 15.666666666666666}
这些是正确的值。
根据您更改的问题回答
代码:
s = """David Smith 17,15,14,19
Melina Jackson 15,16,17,19
Charli Decker 14,15,18,15"""
lines = s.split('\n')
mydict = {}
for detail in lines :
newno = []
items = detail.split(' ')
nos = items[2].split(',')
for s in nos :
newno.append(int(s))
avg = float(sum(newno)/len(newno))
name = str(items[0])+' '+str(items[1])
mydict[name] = avg
print(mydict)
输出:
{'David Smith': 16.25, 'Melina Jackson': 16.75, 'Charli Decker': 15.5}