c
codeye
V1
2022/09/22阅读:32主题:默认主题
DS 字符串
一项涉及鸭子的野生动物研究正在北美洲进行。研究人员正在访问某个地区的一些湿地,对他们看到的情况进行调查。研究人员将提交报告,需要由你的职能部门来处理。
输入 你的函数的输入将是一个数组,其中包括普通鸭子的名字和研究人员的计数。名称和计数在一个数组元素中用空格分开。名称和计数之间的空格数量可能不同;但是,总是至少有一个。一个名字可能会重复,因为一份报告可能是不同地点的调查的组合。
一个输入阵列的例子是。
["Redhead 3", "Gadwall 1", "Smew 4",
"Greater Scaup 10", "Redhead 3",
"Gadwall 9", "Greater Scaup 15",
"Common Eider 6"]
中文
["红头鱼3", "黑鸭子1", "紫貂4",
"大黄鸭10", "红头鱼3", "黑鸭子9",
"大黄鸭15", "普通凫鱼6"]
处理 你的函数应该根据给定的规则(见下文)将鸭子的名字改为六个字母的代码。六个字母的代码应该是大写的。如果一个物种重复出现,应将其计数相加。
输出 从你的函数中返回的最终数据应该是一个按物种代码排序的数组,总计数为整数。编码和计数应该是单独的元素。
一个要返回的数组的例子(基于上面的输入数组的例子)是:。
["comeid", 6, "gadwal",10,
"gresca", 25, "redhea", 6, "smew", 4]
代码是大写的字符串,总计数是整数。
特别说明 如果有人在他们的列表中出现了 "Labrador Duck" ,那么整个列表都应该被扔掉,因为这个物种已经被确定为灭绝了。提交名单的人显然是不可靠的。他们的名单不会被包括在最终的数据中。在这种情况下,返回一个数组,里面只有一个字符串元素。"不合格的数据"
将普通名称转换为六个字母代码的规则。
连字符应该被认为是空格。 如果一个名字只有一个字,使用该名字的前六个字母。如果该名字少于六个字母,则使用其中的内容。 如果一个名字有两个字,取每个字的前三个字母。 如果一个名字有三个字,取每个字的前两个字母。 如果一个名字有四个字,取前两个字的第一个字母,以及后两个字的前两个字母。 数组规则表达式基础知识数据科学
def shorten(items):
items = [c for c in items if c!='']
slic = {1:6,
2:3,
3:2,
4:[1,2]}
lenth = slic.get(len(items),'exceed length')
if len(items) < 4:
return ''.join([c.strip()[:lenth] for c in items])
return ''.join([n[:i//2+1] for i,n in enumerate(items)])
def create_report(names):
ans = []
seq = {}
for c in names:
item = shorten(c.replace("-", " ").split(" ")[:-1]).upper()
num = int(c.split(" ")[-1])
if item in seq.keys():
seq[item] += num
else: seq.update({item:num})
for k in sorted(seq):
if k == 'LABDUC':return ['Disqualified data']
ans.extend([k,seq[k]])
return ans
奉上更漂亮的写法嘟嘟嘟
#1st
def create_report(names):
result = {}
for name in names:
if name.startswith("Labrador Duck"):
return ["Disqualified data"]
name = name.upper().replace("-", " ").split()
count = int(name.pop())
if len(name) == 1:
code = name[0][:6]
elif len(name) == 2:
code = name[0][:3] + name[1][:3]
elif len(name) == 3:
code = name[0][:2] + name[1][:2] + name[2][:2]
elif len(name) == 4:
code = name[0][0] + name[1][0] + name[2][:2] + name[3][:2]
if code in result:
result[code] += count
else:
result[code] = count
return sum([[name, result[name]] for name in sorted(result)], [])
作者介绍
c
codeye
V1