Python 实用小技巧(5)

1、打印九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print('%d*%d=%d'%(j,i,j*i),end="\t")
    print()

输出结果:

1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6   3*3=9 
1*4=4 2*4=8   3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

print()打印函数

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

print() 方法用于打印输出,最常见的一个函数。

参数

  • objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。

  • sep -- 用来间隔多个对象,默认值是一个空格。

  • end -- 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。

  • file -- 要写入的文件对象。

  • flush -- 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。

使用 flush 参数生成一个 Loading 的效果:

import time
print("---RUNOOB EXAMPLE:Loading 效果---")
print("Loading", end="")
for i in range(20):
   print(".", end='', flush=True)
   time.sleep(0.5)

---RUNOOB EXAMPLE:Loading 效果---

Loading....................

2、列表全展开

如何将[[[1,2,3], [4,5]]] 全展开为[1,2,3,4,5]

from collections.abc import Iterable
def flatten(lst, out_lst=None): # 两个参数分别表示带展开的数组
    if out_lst is None:
        out_lst = []
    for i in lst:
        # print(f'i is {i}')
        if isinstance(i, Iterable): # 判断i是否可迭代 
            flatten(i, out_lst) # 尾数递归
        else:
            out_lst.append(i) # 产生结果
    return out_lst # 输出数组

调用函数

>>> print(flatten([[1,2,3],[4,5,6]])) 
>>> print(flatten([[1,2,3],[4,5]], [6,7])) 
>>> print(flatten([[[1,2,3],[4,5,6]]]))
# 结果:
[1, 2, 3, 4, 5, 6]
[6, 7, 1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]

另外,numpy 里的 flatten 与此有微妙不同,这里是 flatten 是递归版本。

>>> import numpy
>>> b = numpy.array([[1,2,3],[4,5]])
>>> b.flatten()
array([list([1, 2, 3]), list([4, 5])], dtype=object)

b.flatten(order= ' C ')

numpy.ndarray.flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组,

order : {'C', 'F', 'A', 'K'}, optional。'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序。

>>> a = numpy.array([[[1,2,3],[4,5,6]]])
>>> print ('原数组:')
>>> print (a)
>>> print ('展开的数组:')
>>> print (a.flatten())  # 默认按行
>>> print ('以 F 风格顺序展开的数组:')
>>> print (a.flatten(order = 'F'))
原数组:
[[[1 2 3]
 [4 5 6]]]
展开的数组:
[1 2 3 4 5 6]
以 F 风格顺序展开的数组:
[1 4 2 5 3 6]

3、列表等分

from math import ceil
def divide(lst, size):
    if size <= 0:
        return [lst]
    return [lst[i * size:(i+1)*size] for i in range(0, ceil(len(lst) / size))]

ceil(x, /)

返回 的上限的整数。最小的整数

>>> lst = [1, 3, 5, 7, 9]
>>> size = 2
>>> ceil(len(lst) / size)
3
>>> r = divide([1, 3, 5, 7, 9], 2)
>>> print(r)  
[[1, 3], [5, 7], [9]]

4、从众多列表中选择最长列表

def max_length(*lst):
    return max(*lst, key=lambda v: len(v))

max

max(iterable, *[, default=obj, key=func]) -> value

max(arg1, arg2, *args, *[, key=func]) -> value

>>> r = max_length([1, 2, 3], [4, 5, 6, 7], [8]) 
>>> print(f'最长的列表是{r}') 
最长的列表是[4, 5, 6, 7]

扩展--从众多列表中最大元素

>>> def max_lists(*lst):
...     return max(max(*lst, key=lambda v: max(v)))
# 例
>>> r = max_lists([1, 2, 3], [6, 7, 8], [4, 5])
>>> print(r)  
8

扩展--求众数

>>> def top1(lst):
...   return max(lst, default='列表为空', key=lambda v: lst.count(v))
# 例
>>> lst = [1, 3, 3, 2, 1, 1, 2]
>>> r = top1(lst)
>>> print(f'{lst}中出现次数最多的元素为:{r}') 
[1, 3, 3, 2, 1, 1, 2]中出现次数最多的元素 为:1

5、按条件分组列表

>>> def div_by(lst, f):
...     return [ [x for x in lst if f(x)], [x for x in lst if not f(x)]]
# 例
>>> records = [11,111,22,33]
>>> div_by(records, lambda x: x<100) 
[[11, 22, 33], [111]]

此处注意 f 函数的使用

-- 数据STUDIO -- 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值