热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python在问答频道中刷题积累到的小技巧(三)

1.sum

1. sum() 二维元组降维,本质就是多个元组也能相加。

>>> tpl = ( (1,2,3),(1,2) )
>>> sum(tpl,())
(1, 2, 3, 1, 2)
>>> sum(tpl,(0,))
(0, 1, 2, 3, 1, 2)
>>> tpl = ( (1,2,3),(4,5) )
>>> sum(tpl,())
(1, 2, 3, 4, 5)
>>> sum(tpl,(0,)) # 单元素元组要加逗号:(0,),否则 (0)==0
(0, 1, 2, 3, 4, 5)
>>> (1,2,3)+(4,5)
(1, 2, 3, 4, 5)
>>> (0,)+(1,2,3)+(4,5)
(0, 1, 2, 3, 4, 5)
>>>

【实例】编写函数,接收数列,返回一个元组,其中第一个元素为所有参数的平均值,其他元素为所有参数中大于平均值的实数。

以下两个函数等价: 

def func1(lst):
t = sum(lst)/len(lst)
return sum((tuple(i for i in lst if i>t),),(t,))
def func2(lst):
t = sum(lst)/len(lst)
return (t,)+tuple(i for i in lst if i>t)

相关阅读:上期第2点列表降维:Python 在问答频道中刷题积累到的小技巧(二)_Hann Yang的博客-CSDN博客

2. '#'号输出日期短格式:'%Y-%#m-%#d' => '2022-6-6'。

附datetime.date常用属性及方法:

>>> import datetime as dt
>>> d = dt.date(2022,6,6)
>>> d.year
2022
>>> d.month
6
>>> d.day
6
>>> d.weekday()
0
>>> d.isoweekday()
1
>>> d.max
datetime.date(9999, 12, 31)
>>> d.min
datetime.date(1, 1, 1)
>>> d.ctime()
'Mon Jun 6 00:00:00 2022'
>>> d.timetuple()
time.struct_time(tm_year=2022, tm_mon=6, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=157, tm_isdst=-1)
>>> d.strftime('%Y-%#m-%#d') #日期短格式
'2022-6-6'
>>> d.isoformat()
'2022-06-06'
>>> d.isocalendar()
(2022, 23, 1) #当年第23周第1天
>>> d.resolution
datetime.timedelta(days=1)
>>> d + dt.timedelta(2)
datetime.date(2022, 6, 8)
>>> d.toordinal()
738312
>>> d-d.min
datetime.timedelta(days=738311)
>>> d - dt.timedelta(d.toordinal()-1)
datetime.date(1, 1, 1)
>>> d.max-d
datetime.timedelta(days=2913747)
>>> dt.date(2023,1,1)-d
datetime.timedelta(days=209)
datetime.date(2022, 6, 6)
>>> d.replace(2023)
datetime.date(2023, 6, 6)
>>> d.replace(d.year,7)
datetime.date(2022, 7, 6)
>>> d.replace(d.year,d.month,8)
datetime.date(2022, 6, 8)
>>> d.replace(d.year,7,8)
datetime.date(2022, 7, 8)
>>> d.replace(2002,7,8)
datetime.date(2002, 7, 8)
>>> d
datetime.date(2022, 6, 6) #d未变更

3. 列表指定位置插入、替换或删除元素:lst[m:m] = [x] 。

>>> lst = [1,2,3,4,5]
>>> lst
[1, 2, 3, 4, 5]
>>> lst[3:3] = [0]
>>> lst
[1, 2, 3, 0, 4, 5]
>>> lst[3] = [0] # 对比
>>> lst
[1, 2, 3, [0], 4, 5]
>>> lst[3:4] = [] # 删除索引为3的元素
>>> lst
[1, 2, 3, 4, 5]
>>> lst[3:3] = [] # 这样lst没有变动
>>> lst
[1, 2, 3, 4, 5]
>>> lst[3:3] = [6,7,8]
>>> lst
[1, 2, 3, 6, 7, 8, 4, 5]
>>> lst[3:6] = [] # 恢复原状
>>> lst
[1, 2, 3, 4, 5]
>>> lst[-1:] = [7,8,9] # 列表去尾相接
>>> lst
[1, 2, 3, 4, 7, 8, 9]
>>> lst[4:] = [5] # 恢复原状
>>> lst
[1, 2, 3, 4, 5]
>>> lst[1:4] = [0, 0, 0] # 替换
>>> lst
[1, 0, 0, 0, 5]
>>> lst[2:3] = [1, 1] # 替换+插入
>>> lst
[1, 0, 1, 1, 0, 5]
>>> lst.insert(3, 2) # 单个元素插入等价于 lst[3:3]=[2]
>>> lst
[1, 0, 1, 2, 1, 0, 5]
>>>
>>> lst = [*range(1,6)]
>>> lst[-1:] = range(1,6)[::-1]
>>> lst
[1, 2, 3, 4, 5, 4, 3, 2, 1]
>>> lst[:4] = [] # 删除前面的字符
>>> lst
[5, 4, 3, 2, 1]

4. 多项式求和时循环变量设置成题目中的一致,只要照抄。

例1: 2/(13) - 3/(25) + 4/(37) - 5/(49) + ... +  (-1)^(n-1) * (n+1) / [ n*(2*n+1) ]

m = int(input())
s = 0
for n in range(1,m+1):
    s += (-1)**(n-1) * (n+1) / ( n*(2*n+1) )
print(round(s, 4))

例2: 1 - 1/2! + 1/4! - 1/6! + ... + (-1)^(n-1)/(2n-2)!

m = int(input())
res, t = 1.0, 1
for n in range(1,m):
t *= (2*n - 1) * n*2 //最后一项是(n-1),代入n*2即(2*n-2)
res += (-1)**n/t
print(res)

5. 任意多个递增序列合并一个递增序列(非相加后排序)。

L0 = [3, 21, 24, 30, 36, 43, 46, 71, 82, 84, 96]
L1 = [7, 15, 22, 23, 32, 39, 41, 51, 74, 76, 87, 89]
L2 = [1, 18, 27, 31, 34, 35, 37, 48, 53, 57, 58, 81, 85, 97, 100]

L = [list(i) for i in (L0, L1, L2)]
res = []
while sum(map(lambda x:len(x),L)):
t, dic = [], {}
for i in range(len(L)):
if L[i]:
dic[L[i][0]] = i
t.append(L[i][0])
res.append(min(t))
L[dic[min(t)]][:1] = []

print(res)

附录:

Help on class date in module datetime:

class date(builtins.object)
 |  date(year, month, day) --> date object
 |  
 |  Methods defined here:
 |  
 |  add(self, value, /)
 |      Return self+value.
 |  
 |  eq(self, value, /)
 |      Return self==value.
 |  
 |  format(...)
 |      Formats self with strftime.
 |  
 |  ge(self, value, /)
 |      Return self>=value.
 |  
 |  getattribute(self, name, /)
 |      Return getattr(self, name).
 |  
 |  gt(self, value, /)
 |      Return self>value.
 |  
 |  hash(self, /)
 |      Return hash(self).
 |  
 |  le(self, value, /)
 |      Return self<=value.
 |  
 |  lt(self, value, /)
 |      Return self |  
 |  ne(self, value, /)
 |      Return self!=value.
 |  
 |  radd(self, value, /)
 |      Return value+self.
 |  
 |  reduce(...)
 |      reduce() -> (cls, state)
 |  
 |  repr(self, /)
 |      Return repr(self).
 |  
 |  rsub(self, value, /)
 |      Return value-self.
 |  
 |  str(self, /)
 |      Return str(self).
 |  
 |  sub(self, value, /)
 |      Return self-value.
 |  
 |  ctime(...)
 |      Return ctime() style string.
 |  
 |  isocalendar(...)
 |      Return a 3-tuple containing ISO year, week number, and weekday.
 |  
 |  isoformat(...)
 |      Return string in ISO 8601 format, YYYY-MM-DD.
 |  
 |  isoweekday(...)
 |      Return the day of the week represented by the date.
 |      MOnday== 1 ... Sunday == 7
 |  
 |  replace(...)
 |      Return date with new specified fields.
 |  
 |  strftime(...)
 |      format -> strftime() style string.
 |  
 |  timetuple(...)
 |      Return time tuple, compatible with time.localtime().
 |  
 |  toordinal(...)
 |      Return proleptic Gregorian ordinal.  January 1 of year 1 is day 1.
 |  
 |  weekday(...)
 |      Return the day of the week represented by the date.
 |      MOnday== 0 ... Sunday == 6
 |  
 |  ----------------------------------------------------------------------
 |  Class methods defined here:
 |  
 |  fromisocalendar(...) from builtins.type
 |      int, int, int -> Construct a date from the ISO year, week number and weekday.
 |      
 |      This is the inverse of the date.isocalendar() function
 |  
 |  fromisoformat(...) from builtins.type
 |      str -> Construct a date from the output of date.isoformat()
 |  
 |  fromordinal(...) from builtins.type
 |      int -> date corresponding to a proleptic Gregorian ordinal.
 |  
 |  fromtimestamp(timestamp, /) from builtins.type
 |      Create a date from a POSIX timestamp.
 |      
 |      The timestamp is a number, e.g. created via time.time(), that is interpreted
 |      as local time.
 |  
 |  today(...) from builtins.type
 |      Current date or datetime:  same as self.class.fromtimestamp(time.time()).
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  new(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  day
 |  
 |  month
 |  
 |  year
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  max = datetime.date(9999, 12, 31)
 |  
 |  min = datetime.date(1, 1, 1)
 |  
 |  resolution = datetime.timedelta(days=1)


推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了蓝桥训练中的闰年判断问题,并提供了使用Python代码进行判断的方法。根据给定的年份,判断是否为闰年的条件是:年份是4的倍数且不是100的倍数,或者是400的倍数。根据输入的年份,输出结果为yes或no。本文提供了相应的Python代码实现。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
author-avatar
李辰1990
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有