【JP】第一章 预备知识

提问前先阅读此贴学习规范,同时要求问题表述清晰,报错相关的问题需以文字而非图片的形式给出代码与重要的错误信息。

请问下条件赋值部分。在教程文中说到:“除了列表推导式,另一个实用的语法糖是条件赋值,其形式为 value = a if condition else b :”
这个意思似乎条件赋值就是if条件赋值了。
但https://www.pynote.net/archives/1124这篇文章也提到,“这种赋值语句中的条件判断,可以是if判断,也可以是or和and判断。”
那是否需要明确说明一下

好的,会说明一下这里的条件选择赋值是指if else类型的赋值,另外这篇文章当中的其他“条件赋值”看上去可读性较差,不建议使用

继续提问哦。教程中的一个例子,截断列表中超过5的元素:

In [9]: L = [1, 2, 3, 4, 5, 6, 7]

In [10]: [i if i <= 5 else 5 for i in L]
Out[10]: [1, 2, 3, 4, 5, 5, 5]

我自己的理解,截断的要求是否应该是输出:[1,2,3,4,5] 而不是超过5的就用5代替呢?可能有一点歧义

如果输出是[1,2,3,4,5]应该叫条件选择(select),而不是截断(clip),pandas中的clip函数行为也是类似于这个例子的意思

感谢大佬的回复!我理解clip是修剪的意思,老师给翻译成截断了是吗?理解pandas里面clip的功能就理解为啥这里要这么写了。

关于上面条件赋值的问题,我说一下我个人的看法:

假设学习手册是A,https://www.pynote.net/archives/1124 这篇参考文献是B
首先,我认为至少要给予A和B同样的参考权重,不能因为B里面写的东西去影响A,毕竟B不是官方手册,就好比我去向B作者提意见应该遵从A的内容也是有待商榷的。

其次,在B文献中提到:“Python的赋值语句,有一种带条件判断的语法,将赋值和条件判断融为一行代码,使需要条件判断的赋值代码写起来更加简练高效。”这句话我是认同的,条件赋值确实由条件判断和赋值两部分构成,后面“这种赋值语句中的条件判断,可以是if判断,也可以是or和and判断。”这句话我认为有待商榷,观点如下:

1)“or和and判断”和if判断不在同一个维度:

a = 10 or 20
a = 10 and 20

上面先计算的是后面的逻辑运算,然后才赋值,这里面并没有任何条件判断,只有逻辑判断

它们可以等价于:

image

那这样,无异于and+or判断也从属于if判断

2)从另一个角度来说,if是语句 后面的代码块包含条件判断,而or和and是逻辑运算符,来分析and和or的作用:
image
and的作用,两侧中含0,返回0; 均为非0时,返回后一个值
or的作用,两侧中至少有一个非0时,返回第一个非0

所以从用法上来说and和or与if有着本质上的区别,if是判断后面一个代码块是否为真,而and和or是综合判断两个代码块。

综上,我认为条件赋值的用法就是一种精炼的用法,是有特定指代的,而无需注明。

打个比方,厨师说红烧牛肉好吃,红烧牛肉由烹饪手法和肉类构成,而肉类包括牛肉、羊肉等等,所以菜单上可以直接写红烧牛肉原材料是牛肉,无需再写不包含羊肉等其他肉类。

一点点个人的拙见
黄元帅

image
这一部分应该把i改成j 吧

是的,谢谢指出!

编号:13 昵称:黄元帅

image

如上,因为choice()方法默认是有放回的,这块也许改成“在choice()方法将replace设为False的前提下,当返回个数等于数组长度时(无放回抽样时)等价于permutation()方法”可能会更好一些

否则可能会产生一些误导,如:

image

1赞

好的,的确写的不太清楚

Joyful Pandas的pdf版本中1.2.6节[b]中(23页第一行),martix_target改为matrix_target
image

好的
贴子要有8个字符,我现在应该够了

使用列表推导式进行截断的这个例子:
L = [1, 2, 3, 4, 5, 6, 7]
[i if i <= 5 else 5 for i in L]
如何同时对小于2和大于5进行截断?
一般的,列表推导式如何实现分支?

>>>[2 if i<= 2 else i if i <= 5 else 5 for i in L]
[2, 2, 3, 4, 5, 5, 5]

编号:13
内容:补充

1.p13 求a到b上的均匀分布部分

image

在numpy.random中有专门求均匀分布的方法‘numpy.random.uniform(low=0.0, high=1.0, size=None)’

image

  1. p13 求一般一元正态分布部分

image

‘numpy.random.normal(loc=0.0, scale=1.0, size=None)’

image

出发点:

1)都列出来可能做一个对比会更容易横向理解
2)避免不熟悉Numpy的同学重复造轮子

可以
贴子要有8个字符,我现在应该够了

想请教一下为啥多次运行结果不一样?请原谅一个小白

随机从my_list中选取两个不重复字符,p是每个字符被选取的概率

我是以为总会选到c和a 才对呀?不知是否理解错了呢