qdwxzzy 发表于 2020-4-9 13:56:53

最近在学习一个量化平台的编程,碰到了问题

本帖最后由 qdwxzzy 于 2020-4-9 16:45 编辑

有一句代码实在不能理解,先说明一些情况

1.not_suspended_info   一开始我以为是一个pandas的dateframe类型,但是后来发现不对,存的列数据是一个字典,用到的两列的数据说明:
key                      类型          说明
symbol                str          标的代码
is_suspended        int          是否停牌. 1: 是, 0: 否


找到了一个样本,not_suspended_info 里面存的是一个list
not_suspended_info = [{'symbol': 'SHSE.600037', 'sec_level': 1, 'multiplier': 1.0, 'margin_ratio': 1.0, 'pre_close': 14.5600004196167, 'upper_limit': 16.02, 'lower_limit': 13.1, 'adj_factor': 5.09191478865, 'info': {'symbol': '', 'sec_type': 0, 'exchange': '', 'sec_id': '', 'sec_name': '', 'sec_abbr': '', 'sec_asset': '', 'price_tick': 0.0, 'trade_n': 0, 'listed_date': None, 'delisted_date': None}, 'is_suspended': 0, 'settle_price': 0.0, 'position': 0, 'pre_settle': 0.0}, {'symbol': 'SHSE.600060', 'sec_level': 1, 'multiplier': 1.0, 'margin_ratio': 1.0, 'pre_close': 15.170000076293945, 'upper_limit': 16.69, 'lower_limit': 13.65, 'adj_factor': 5.4699656415808, 'info': {'symbol': '', 'sec_type': 0, 'exchange': '', 'sec_id': '', 'sec_name': '', 'sec_abbr': '', 'sec_asset': '', 'price_tick': 0.0, 'trade_n': 0, 'listed_date': None, 'delisted_date': None}, 'is_suspended': 0, 'settle_price': 0.0, 'position': 0, 'pre_settle': 0.0}, {'symbol': 'SHSE.600066', 'sec_level': 1, 'multiplier': 1.0, 'margin_ratio': 1.0, 'pre_close': 21.969999313354492, 'upper_limit': 24.17, 'lower_limit': 19.77, 'adj_factor': 38.630978556603, 'info': {'symbol': '', 'sec_type': 0, 'exchange': '', 'sec_id': '', 'sec_name': '', 'sec_abbr': '', 'sec_asset': '', 'price_tick': 0.0, 'trade_n': 0, 'listed_date': None, 'delisted_date': None}, 'is_suspended': 0, 'settle_price': 0.0, 'position': 0, 'pre_settle': 0.0,}]


2.看不懂的这句代码如下
not_suspended_symbols = for item in not_suspended_info if not item['is_suspended']]


3.我自己对这句代码的理解(这句代码的本意是取不停牌的标的代码)
把not_suspended_info数据里面列索引is_suspended值不为0的数据取出来,然后返回symbol列给not_suspended_symbols

4.我的疑问
for item in not_suspended_info if not item['is_suspended']]   为什么可以取出来is_suspended为0的,symbol的值??????



这个代码的结构真的让人很抓瞎啊,请能看懂的人帮忙把这句代码分解解释下,谢谢

qdwxzzy 发表于 2020-4-9 14:06:08

本帖最后由 qdwxzzy 于 2020-4-9 15:04 编辑

在掘金的论坛中找到了                                             not_suspended_info类型为list,之后就是将所提取的“字典”转换为”list

zltzlt 发表于 2020-4-9 17:21:51

for item in not_suspended_info if not item['is_suspended']]

就等于:

for item in not_suspended_info if item['is_suspended'] == 0]

这是列表推导式。

qdwxzzy 发表于 2020-4-10 09:15:38

zltzlt 发表于 2020-4-9 17:21
就等于:




网上关于list的知识点不多,改改用现在没问题         我就其实就想学一下,这句代码背后的逻辑,以后碰到困难的情况就可以举一反三
页: [1]
查看完整版本: 最近在学习一个量化平台的编程,碰到了问题