一天一个小技巧(python版)

本文介绍了如何使用Python的zip()函数压缩可迭代对象,以及如何通过'*'号进行解压操作。此外,还讲解了字符串替换特定字符的方法和Python strip()的用法。同时,涵盖了Python设置跳出多重循环的不同策略,如自定义异常、封装函数和for...else结构。最后,涉及url编码、json视图输出和腾讯云函数库的添加方法。


一天一个小知识–python

zip()压缩可迭代对象,’*'号解压可迭代对象

  • 可迭代对象才可以使用*号拆分;
  • 带*号变量严格来说并不是一个变量,而更应该称为参数,它是不能赋值给其他变量的,但可以作为参数传递;

解包

# 在输出时使用'*'号对列表元素进行解包
# 例如:一维列表
a=[1,2,3,4]
print(*a)
# 输出样例
# 1
# 2
# 3
# 4
# 二维列表
a=[[1,2,3],[4.5.6],[7,8,9]]
print(*a)
# 输出样例
# [1,2,3]
# [4,5,6]
# [7,8,9]

压缩

>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)     # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)              # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)          # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]

字符串替换特定字符

例题:牛客-好串问题(NC21874)
题目描述

牛牛喜欢跟字符串玩耍,他刚刚学会了一个新操作,将一个字符串x插入另一个字符串y中(包括放在开头和结尾)
牛牛认为如果一个串是好的当这个串能按照如下方法被构造出来:
一开始,有一个空串,然后执行0次或者若干次操作,每次操作将ab插入当前的字符串

	根据上面的定义,ab, aabb, aababb都是好串,aab,ba,abbb并不是好串
	现在给你一个字符串s,判断s是否是好串

输入描述:

输入一行包含一个字符串,长度不超过50

输出描述:

	输出"Good" 或者 "Bad"

示例1:输入

	ab

输出

	Good
# 解
# import re
s=input()
while ('ab' in s) :
    s=s.replace('ab', '')
#     注意一定要使用变量储存结果,不然不会保存
#	或者
#	s=re.sub('ab','',s) # 要求同上
if len(s)==0:
    print('Good')
else:
    print('Bad')

Python strip()方法

Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

语法

str.strip([chars]);
# -*- coding: UTF-8 -*-
str = "00000003210Runoob01230000000"
print str.strip( '0' ) # 去除首尾字符 0
str2 = "   Runoob      "   # 去除首尾空格
print (str2.strip())
# 以上实例输出结果如下:
# 3210Runoob0123
#Runoob

Python设置跳出多重循环

  • 自定义异常
class Getoutofloop(Exception):#自定义跳出多重循环异常
    pass
try:
    for i in range(5):
        for j in range(5):
            if :#终止条件
                raise Getoutofloop()
            else:
                print (i, '----', j)
except Getoutofloop:
    pass
# try容易导致运行时间变长的现象,不太推荐(个人观点,大佬勿喷!!!)
  • 封装函数
def test():
    for i in range(5):
        for j in range(5):
            if :#循环终止条件
                return
            else:
                print (i, '----', j)
test()
# 将循环封装在函数内部,比较推荐
  • for …else…结构
for i in range(5):
    for j in range(5):
        for k in range(5):
            if :#终止条件
                break
            print (i, '----', j, '----', k)
        else:        
        	break       
    else:           
    	break 
else:
	break  # break根据需求进行变改方案相对灵活           

url编码——urllib.parse库使用

  • 使用quote()函数进行编码和使用unquote()函数进行解码
from urllib.parse import quote, unquote
print("编码结果为:" + quote('字符串', '原字符串编码格式'))
print("解码结果为:" + unquote('字符串', '目标字符串编码格式'))

json的树状视图输出

from json import dumps
c=jsonObject
dumps(c,indent=4,sort_keys=True,ensure_ascii=False).encode().decode('utf-8')

ACwing__3804. 构造字符串

给定一个长度为 n 的由小写字母构成的字符串 s。
请你构造一个长度为 k 的由小写字母构成的字符串 t。
要求,字符串 t 需满足:

1.字符串 t 在字典序上大于字符串 s。
2.字符串 t 的字母集是字符串 s 的字母集的子集。一个字符串的字母集是指该字符串包含的所有不同字母的集合,例如 abadaba 的字母集为 {a,b,d}。
3.字符串 t 在字典序上尽可能小。

保证答案存在。

import bisect # bisect --- 数组二分查找算法,https://docs.python.org/zh-cn/3/library/bisect.html

T = int(input())
for _ in range(T):
    n, k = map(int, input().split())
    s = input()

    us = set(s)
    cs = list(us)       #所有的字母。数组中
    cs.sort()
    cn = len(cs)
    min_c = min(us)     #最小的字母

    if k <= n:
        t = s[:k]
        t = list(t)

        for i in range(k - 1, -1, -1):
            c = t[i]
            ID = bisect.bisect_right(cs, c)
            if 0 <= ID < cn:
                y = cs[ID]
                t[i] = y
                break
            else:
                t[i] = min_c

    if n < k:
        t = s + ''.join([min_c for _ in range(k - n)])
    res = ''.join(t)
    print(res)
#大佬的题解链接:https://www.acwing.com/solution/content/62413/

python在腾讯云函数添加库的方案

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值