python中的一些小坑

个人微信公众号:程序员宅急送
在这里插入图片描述
1、

tuple嵌套tuple类型一定要记得逗号

a = ((1))
b = ((1),)

这两个看起来好像也没什么差别嘛,就是一个都好而已

打印出来的结果却差很多!

print(type(a))
print(a)
print(type(b))
print(b)
"""
<class 'int'>
1
<class 'tuple'>
(1,)
"""

2、list运算时候的小坑

a=[1,2,3]
b=a;
a+=[4,5,6]
# a = a+[4,5,6]
print(a,b)
"""
使用+=打印结果
[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6]
第二种打印结果
[1, 2, 3, 4, 5, 6] [1, 2, 3]
"""

3、list的遍历删除

a = [11,22,33,44]
for i in a:
    print(i)
    a.remove(i);
print(a)
"""
11
33
[22, 44]
"""

这是由于,当我们删除第0个数据11之后,list中剩下[22,33,44]。

下一次循环我们遍历到了此时list的第1个,也就是33。

所以,如果想要全部删除,

(1)我们可以从后往前删除,

(2)循环判断list剩余数据,每次删除第一个

4、is和==的区别

is比较的是两个整数对象的id值是否相等,也就是比较两个引用是否代表了内存中同一个地址。

==比较的是两个整数对象的内容是否相等,使用==时其实是调用了对象的__eq__()方法。

首先我们运行下面这段代码

a=0
b=0
while(True):
    if a is b:
        print('%d is %d'%(a,b))
        a+=1
        b+=1
    else:
        print('%d is not %d'%(a,b))
        break
a=0
b=0
while(True):
    if a is b:
        print('%d is %d'%(a,b))
        a-=1
        b-=1
    else:
        print('%d is not %d'%(a,b))
        break

结果如下图
在这里插入图片描述
为什么a和b是两个对象,用is比较确实True呢?

因为python出于对性能的考虑做了一些优化,他将[-5,256]这个范围的整数都保存在了一个叫small_ints的链表中,我们使用就从里面去而不需要反复创建新的对象。

但是超过了这个范围,我们就会看到,即使数值一样,也不是一个对象。

然后我们再看下面这一段

a = 257


def main():
	b = 257  # 第6行
	c = 257  # 第7行
	print(b is c)  # True
	print(a is b)  # False
	print(a is c)  # False


if __name__ == "__main__":
	main()

结果在注释上面了,

那么为什么b is c是True?

为什么会出现这样的结果,首先我们来说说Python程序中的代码块。所谓代码块是程序的一个最小的基本执行单位,一个模块文件、一个函数体、一个类、交互式命令中的单行代码都叫做一个代码块。上面的代码由两个代码块构成。

a = 257是一个代码块,main函数是一个代码块。

Python内部为了进一步提高性能,凡是在一个代码块中创建的整数对象,如果值不在small_ints缓存范围之内,但是在该代码块中已经存在一个值相同的整数对象,我们就直接引用该对象。

这条规则只对非负数和字符串有用。

我们可以打印id来证明一下

a = 257


def main():
    b = 257
    c = 257
    print(id(a))
    print(id(b))
    print(id(c))

if __name__ == "__main__":
	main()

打印结果如下图,可以看到b和c确实是一个对象
在这里插入图片描述

好的,关于使用Python的Seaborn库绘制小提琴图,有一些需要注意的地方。 首先,要确保已经安装了Seaborn库。可以使用以下命令安装: ``` pip install seaborn ``` 其次,需要导入Seaborn库和Matplotlib库: ```python import seaborn as sns import matplotlib.pyplot as plt ``` 接下来,我们需要准备数据。小提琴图通常用于显示数值型变量的分布情况,最常见的是显示不同类别或组之间的比较。因此,我们需要将数据按照类别或组分组。 例如,我们有一个数据集,其包含了不同城市的温度数据。我们可以按照城市将数据分组,并将每个城市的温度数据存储在一个列表。 ```python data = { 'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'], 'Temperature': [ [68, 73, 77, 80, 83, 87, 88, 88, 85, 80, 74, 68], [55, 60, 62, 64, 68, 72, 75, 76, 74, 70, 62, 55], [28, 32, 40, 52, 63, 72, 77, 75, 68, 56, 42, 30], [49, 53, 60, 69, 77, 83, 87, 87, 81, 71, 60, 50], [65, 68, 74, 81, 89, 97, 100, 99, 93, 83, 72, 63] ] } ``` 接下来,我们可以使用Seaborn库的violinplot函数来绘制小提琴图: ```python sns.violinplot(x='City', y='Temperature', data=data) plt.show() ``` 这将会生成一个小提琴图,其x轴表示城市名称,y轴表示温度值。 然而,有时候我们可能会遇到一些小坑。比如,当我们使用Seaborn库的violinplot函数绘制小提琴图时,如果数据集有缺失值,会导致程序崩溃。因此,我们需要在绘图之前先处理好数据,确保不存在缺失值。 此外,如果数据集存在异常值,也可能会导致小提琴图绘制不准确。因此,在绘制小提琴图之前,我们需要对数据进行合理的处理和清洗。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值