python拾锦

1.关于bool (True=1 && False=0)

a,b=3,4
d=5
(a,b)[d==10]
输出为3

达到了通过bool操作来选择某一变量的目的,可以使用这种操作来选择字典类型cfg。

2.关于itertools.product

from itertools import product as product
list(product(range(3), repeat=2))

输出为:

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), 
(1, 2), (2, 0), (2, 1), (2, 2)]

[(i,j) for i in range(3) for j in range(3)]

效果一样。

3.两次sort()得到元素在升序/降序排列后的idx (torch操作)

以降序为例:

a=torch.tensor([[3,6,1,2,9]])
_, index = a.sort(1,descending=True)
_, idx = index.sort(1,descending=True)
#tensor([[2, 1, 4, 3, 0]])

4.print的几种方法

方法一:

a=0.378
print("{:.5f} is not a integer".format(a))

方法二:

a=0.378
print(f"{
      
      a:.5f} is not a integer")

方法三:

a=0.378
print("%.3f is not a integer"%a)

输出结果一致,均为:

扫描二维码关注公众号,回复: 13371931 查看本文章
0.37800 is not a integer

5. functools.reduce + lambda

import functools
functools.reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
Out: 15

functools.reduce(lambda x, y: x*y, [1, 2, 3, 4, 5])
Out: 120

6. 使用python命令让一个列表按另外一个列表的升序/降序进行排列

a=[3, 4, 5]
b=[2, 3, 1]

c=[[a[i],b[i]] for i in range(len(a))]
# [[3, 2], [4, 3], [5, 1]]
d=sorted(c,key=lambda x:x[1])
# [[5, 1], [3, 2], [4, 3]]

e=[item[0] for item in d]
#[5, 3, 4]

或者使用zip()再进行排序,更加简洁:

a=[3, 4, 5]
b=[2, 3, 1]

f=sorted(zip(a,b),key=lambda x:x[1])
#[(5, 1), (3, 2), (4, 3)]

g=[item[0] for item in f]
#[5, 3, 4]

7. 字符串前r,f,u的含义

字符 作用
f 格式化字符串,替换{}中的内容。
r 将"\n"等转移字符当做普通字符,可用于re正则表达式中。
u 表示以16位unicode进行存储。在Python2中,普通字符串是以8位ASCII码进行存储的。而Python3中,所有的字符串都是Unicode字符串

示例:

exp = "abc\n\n\"
print(exp)

输出为:

abc

而:

exp = r"\n\n\n\n"
print(exp)

输出为:

abc\n\n\

8. 数字转字符串(前面要加几个0的操作)

如果想让数字10,输出字符串'010',可使用如下两种操作:

  • 常规操作
a=10
(3-len(str(a)))*'0'+str(a)
#输出
'010'
  • 快捷操作
a=10
"%03d"%a
#输出
'010'

9.将多维列表平铺成一维列表

a=[[1,2,3],[4,5,6],[7,8,9]]
sum(a,[])
#out:
[1, 2, 3, 4, 5, 6, 7, 8, 9]

10.多维列表赋值

以二维为例,

10.1 方法一

ls=[[0]*3]*3
#out:
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

但是若对单个元素赋值,则会产生意想不到的错误:

ls[0][0]=1
#out:
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]

因此,这是一种不推荐的赋值方法。

10.2 方法二

ls=[[0]*3 for _  in range(3)]
#out:
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]

同样对单个元素赋值:

ls[0][0]=1
#out:
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

11.__call__方法

class linear:

    def __init__(self, a, b):
        self.a, self.b = a, b

    def __call__(self, x):
        return self.a * x + self.b

taxes = linear(0.3, 2)
print(taxes(10))
print(taxes.__call__(10))

结果为:

5.0
5.0

12. tuple知多少

12.1 tuple相加

(5,) +(4,)
# (5, 4)

13.用python执行cmd中的命令

13.1 os.system

如:

os.sytem("py d:\\1.py"

如果是exe,直接使用

os.sytem("d:\\1.exe")

13.2 使用subprocess

 subprocess.run("CMD中的命令", shell=True)
 #或:
  subprocess.call("CMD中的命令", shell=True)

14.filter的简单使用

实例说话:

假如有这样一个列表:

ls=[(1,2),(4,3),(5,6)]

滤除列表元素tuple中第一个子元素大于第二个子元素的项,这里即过滤掉(4,3)。

该怎样做呢?

最容易想到的方法:

for item in ls:
    if item[0]>item[1]:
        ls.remove(item)

但这样写法有点啰嗦。

现在是filter过滤器出场:

list(filter(lambda x:x[0]<x[1],ls))

当然lambda 语句也可以用函数表示:

def filt(item):
    return item[0]<item[1]

list(filter(filt,ls))

由于filter()函数返回的是一个迭代器对象,使用list()将其转化为列表对象。

15.判断文件后缀、获取某种类型的文件

  • 1.endswith方法:
st='D://1.jpg'
st.endswith('.jpg')
#True
  • 2.使用os.path.splitext()
    返回一个tuple类型
os.path.splitext(st)
#('D://1', '.jpg')
  • 3.使用glob
    在这里插入图片描述
import glob
path=r'E:\images'
glob.glob(path+'/*.jpg')
#Out: 
['E:\\images\\000005.jpg',
 'E:\\images\\000007.jpg',
 'E:\\images\\000009.jpg',
 'E:\\images\\000012.jpg',
 'E:\\images\\000016.jpg']
  • 4.使用pathlib
import pathlib
path=r'E:\images'
data_dir = pathlib.Path(path)
list(data_dir.glob('*.jpg'))
#Out: 
[WindowsPath('E:/images/000005.jpg'),
 WindowsPath('E:/images/000007.jpg'),
 WindowsPath('E:/images/000009.jpg'),
 WindowsPath('E:/images/000012.jpg'),
 WindowsPath('E:/images/000016.jpg')]

转成我们通常看到的文件地址形式:

 str(list(data_dir.glob('*.jpg'))[0])
 #'E:\\images\\000005.jpg'

然后就可以正常使用这些路径进行图片读取等操作,如:

import PIL
PIL.Image.open(str(list(data_dir.glob('*.jpg'))[0]))

16.isinstance() 函数

判断一个对象是否是某个类型的实例。
示例来自于https://m.runoob.com/python/python-func-isinstance.html

a = 2
isinstance (a,int)
#True
isinstance (a,str)
#False
isinstance (a,(str,int,list))    # 是元组中的一个返回 True
#True

特别是将多个类型放到一个tuple里,写法非常简便,相当于多个语句的或。

参考

[1] https://www.runoob.com/python3/python3-string.html
[2] Python 字符串前面加u,r,b,f的含义
[3] https://www.cnblogs.com/geoffreyone/p/10761720.html
[4] https://m.runoob.com/python/python-func-isinstance.html

猜你喜欢

转载自blog.csdn.net/WANGWUSHAN/article/details/106308316