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