算法篇汇总

  1. 文章浏览 I

https://leetcode.cn/problems/article-views-i/description/?envType=study-plan-v2&envId=30-days-of-pandas&lang=pythondata

我的题解:

import pandas as pd

def article_views(views: pd.DataFrame) -> pd.DataFrame:
    df=views[views['author_id']==views['viewer_id']]
    df=df.sort_values('author_id')
    df=df.rename(columns={"author_id":"id"})
    df= df[['id']]
    df=df.drop_duplicates()
    
    return df

官方题解:

import pandas as pd

def article_views(views: pd.DataFrame) -> pd.DataFrame:
    df = views[views['author_id'] == views['viewer_id']]

    df.drop_duplicates(subset=['author_id'], inplace=True)
    df.sort_values(by=['author_id'], inplace=True)
    df.rename(columns={'author_id':'id'}, inplace=True)

    df = df[['id']]

    return df

作者:力扣官方题解
链接:https://leetcode.cn/problems/article-views-i/solutions/168689/wen-zhang-liu-lan-i-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收获:要记牢参数。

  1. 计算特殊奖金

https://leetcode.cn/problems/calculate-special-bonus/description/?envType=study-plan-v2&envId=30-days-of-pandas&lang=pythondata

我的题解

import pandas as pd

def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:
    def func(x):
        x['bonus'] = x['salary'] if x['employee_id']%2==1 and x['name'][0]!='M' else 0    
        return x
    df=employees.apply(lambda x: func(x)  ,axis=1)
    df = df[['employee_id','bonus']]
    df=df.sort_values('employee_id')
    
    return df

官方题解:

def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:
    employees['bonus'] = employees.apply(
        lambda x: x['salary'] if x['employee_id'] % 2 and not x['name'].startswith('M') else 0, 
        axis=1
    )

    df = employees[['employee_id', 'bonus']].sort_values('employee_id')
    return df

作者:力扣官方题解
链接:https://leetcode.cn/problems/calculate-special-bonus/solutions/2366165/ji-suan-te-shu-jiang-jin-by-leetcode-sol-ipj4/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收获:可以把dtaframe的apply结果直接对一列赋值 ,之前习惯于赋值df。
employees[‘bonus’] = employees.apply(xxx)

  1. 修复表中的名字

https://leetcode.cn/problems/fix-names-in-a-table/description/?envType=study-plan-v2&envId=30-days-of-pandas&lang=pythondata
我的题解:

import pandas as pd

def fix_names(users: pd.DataFrame) -> pd.DataFrame:
    users['name']=users.apply(lambda x:x['name'][0].upper()+x['name'][1:].lower(),axis=1)
    users=users.sort_values('user_id')
    return users

官方题解:

import pandas as pd

def fix_names(users: pd.DataFrame) -> pd.DataFrame:
    users["name"] = users["name"].str[0].str.upper() + users["name"].str[1:].str.lower()
    return users.sort_values("user_id")

作者:力扣官方题解
链接:https://leetcode.cn/problems/fix-names-in-a-table/solutions/2366177/xiu-fu-biao-zhong-de-ming-zi-by-leetcode-vrs5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


import pandas as pd

def fix_names(users: pd.DataFrame) -> pd.DataFrame:
    users["name"] = users["name"].str.title()
    return users.sort_values("user_id")

作者:力扣官方题解
链接:https://leetcode.cn/problems/fix-names-in-a-table/solutions/2366177/xiu-fu-biao-zhong-de-ming-zi-by-leetcode-vrs5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收获:
1.字符串的title()函数。
2. dataframe对列操作.str后也可以再切片操作,之前知道可以str操作,不知道可以切片再操作。 users[“name”].str[0].str.upper()

  1. 患某种疾病的患者

https://leetcode.cn/problems/patients-with-a-condition/description/?envType=study-plan-v2&envId=30-days-of-pandas&lang=pythondata
我的题解:

def find_patients(patients: pd.DataFrame) -> pd.DataFrame:
    def func(x):
        list_con=x['conditions'].split(' ')
        for i in list_con:
            if i[0:5]=='DIAB1':
                x['is_ok']='ok'
        return x
    patients['is_ok']=None
    df=patients.apply(lambda x:func(x),axis=1)
    df=df.dropna(subset=['is_ok'])
    df=df.drop(['is_ok'],axis=1)
    return df

官方题解:

方法 1:使用正则表达式单词边界
def find_patients(patients: pd.DataFrame) -> pd.DataFrame:
    return patients[patients["conditions"].str.contains(r"\bDIAB1", regex=True)]

作者:力扣官方题解
链接:https://leetcode.cn/problems/patients-with-a-condition/solutions/2366188/huan-mou-chong-ji-bing-de-huan-zhe-by-le-7i52/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


方法 2:不使用正则表达式
def find_patients(patients: pd.DataFrame) -> pd.DataFrame:
    return patients[patients["conditions"].str.startswith("DIAB1") | patients["conditions"].str.contains(" DIAB1", regex=False)]

作者:力扣官方题解
链接:https://leetcode.cn/problems/patients-with-a-condition/solutions/2366188/huan-mou-chong-ji-bing-de-huan-zhe-by-le-7i52/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收获:(字符串函数了解太少)

  1. str.contains(r"\bDIAB1", regex=True)
    这个\b是表示字母数字与非字母数字的边界。。可以当成单词开头理解。
    contains() 是一个字符串方法,用于检查字符串中是否包含指定的子字符串。如果字符串包含子字符串,则返回 True,否则返回 False。
    在某些情况下,需要在使用正则表达式时将特定参数设置为 True(regex=True)。
  2. str.startswith(“DIAB1”)
    startswith() 是一个字符串方法,用于检查字符串是否以指定的前缀开始。如果字符串以指定的前缀开始,则返回 True,否则返回 False。
  1. 无效的推文

https://leetcode.cn/problems/invalid-tweets/description/?envType=study-plan-v2&envId=30-days-of-pandas&lang=pythondata
我的题解:

import pandas as pd

def invalid_tweets(tweets: pd.DataFrame) -> pd.DataFrame:
    df=tweets[tweets['content'].str.len()>15]
    tweet_id=df[['tweet_id']]
    return tweet_id

官方题解:

def invalid_tweets(tweets: pd.DataFrame) -> pd.DataFrame:
    is_valid = tweets['content'].str.len() > 15
    df = tweets[is_valid]
    return df[['tweet_id']]

作者:力扣官方题解
链接:https://leetcode.cn/problems/invalid-tweets/solutions/2366155/wu-xiao-de-tui-wen-by-leetcode-solution-5tfp/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收获:tweets[is_valid]
可以这样进行筛选dataframe[布尔列表]

  1. 查找拥有有效邮箱的用户

https://leetcode.cn/problems/find-users-with-valid-e-mails/description/?envType=study-plan-v2&envId=30-days-of-pandas&lang=pythondata
我的题解:


官方题解:

概述
给出一个包含用户及其电子邮件的表,我们希望根据用户的电子邮件地址的有效性来筛选用户。一封有效的电子邮件应该以只包含允许字符的前缀开头,以域名 '@leetcode.com' 结尾。

方法 1:使用正则表达式
思路
一般来说,如果你被要求匹配一个字符串,应该最先想到写一个正则表达式模式进行匹配。

正则表达式提供各种功能,以下是一些相关功能:

^:表示一个字符串或行的开头

[a-z]:表示一个字符范围,匹配从 a 到 z 的任何字符。

[0-9]:表示一个字符范围,匹配从 09 的任何字符。

[a-zA-Z]:这个变量匹配从 a 到 z 或 A 到 Z 的任何字符。请注意,你可以在方括号内指定的字符范围的数量没有限制,您可以添加想要匹配的其他字符或范围。

[^a-z]:这个变量匹配不在 a 到 z 范围内的任何字符。请注意,字符 ^ 用来否定字符范围,它在方括号内的含义与它的方括号外表示开始的含义不同。

[a-z]*:表示一个字符范围,匹配从 a 到 z 的任何字符 0 次或多次。

[a-z]+:表示一个字符范围,匹配从 a 到 z 的任何字符 1 次或多次。

.:匹配任意一个字符。

\.:表示句点字符。请注意,反斜杠用于转义句点字符,因为句点字符在正则表达式中具有特殊含义。还要注意,在许多语言中,你需要转义反斜杠本身,因此需要使用\\.。

$:表示一个字符串或行的结尾。

核心思想是将 name 列的第一个字符从其余字符分开,相应地改变它们的大小写,最后把他们拼回在一起。

算法
选择 mail 列匹配正则表达式的那些行。

实现
MySQL

SELECT user_id, name, mail
FROM Users
-- 请注意,我们还转义了`@`字符,因为它在某些正则表达式中具有特殊意义
WHERE mail REGEXP '^[a-zA-Z][a-zA-Z0-9_.-]*\\@leetcode\\.com$';
Pandas

import pandas as pd

def valid_emails(users: pd.DataFrame) -> pd.DataFrame:
    # 注意我们如何使用原始字符串(在前面放一个‘r’)来避免必须转义反斜杠
    # 还要注意,我们对`@`字符进行了转义,因为它在某些正则表达式中具有特殊意义
    return users[users["mail"].str.match(r"^[a-zA-Z][a-zA-Z0-9_.-]*\@leetcode\.com$")]

作者:力扣官方题解
链接:https://leetcode.cn/problems/find-users-with-valid-e-mails/solutions/2366182/cha-zhao-yong-you-you-xiao-you-xiang-de-gn7ym/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收获:正则表达式

  1. 删除重复的电子邮箱

https://leetcode.cn/problems/delete-duplicate-emails/description/?envType=study-plan-v2&envId=30-days-of-pandas&lang=pythondata
我的题解:

import pandas as pd

# Modify Person in place
def delete_duplicate_emails(person: pd.DataFrame) -> None:
        person.sort_values('id',inplace=True)
        person.drop_duplicates(subset=['email'],keep='first',inplace=True)
        return 

官方题解:

import pandas as pd

def delete_duplicate_emails(person: pd.DataFrame) -> None:
    min_id = person.groupby('email')['id'].transform('min')
    removed_person = person[person['id'] != min_id] 
    person.drop(removed_person.index, inplace=True)
    return

作者:力扣官方题解
链接:https://leetcode.cn/problems/delete-duplicate-emails/solutions/2366230/shan-chu-zhong-fu-de-dian-zi-you-xiang-b-8e7p/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

  1. name

超链接
我的题解:


官方题解:


收获:

# 打印序号模板
if __name__ == '__main__':
    for i in range(4,100):
        print('{}. name'.format(i))
        print('\n\n')
        print('[超链接](超链接)')
        print('我的题解:')
        print('```python\n\n```')
        print('官方题解:')
        print('```python\n\n```')
        print('> 收获:')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

confined.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值