使用if/else和for循环将项附加到列表理解中的列表

2024-10-03 06:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经知道如何在if循环中根据for附加值,但我想知道是否有一种优化的方法

以下是解决方案:

columm=[]
for i in range(movies.shape[1]): 
    if ((movies.dtypes[i]==float) | (movies.dtypes[i]==int)): 
        columm.append(movies.columns[i])
print(columm)
['title_year', 'aspect_ratio', 'duration', 'duration.1', 'budget', 'imdb_score', 'gross']

其中电影是一个数据集

我试过这个:

column=[movies.columns[i] if ((movies.dtypes[i]==float) | (movies.dtypes[i]==int)) else 0 for i in range(movies.shape[1])]

但结果是:

[0, 'title_year', 0, 'aspect_ratio', 'duration', 0, 0, 'duration.1', 0, 0, 0, 0, 0, 0, 0, 0, 'budget', 'imdb_score', 'gross']

我不得不把0放在else句中,因为如果没有它,它就意味着语法错误

那么,我能把这三行放在一句话里吗


Tags: columnsinforiftitlerangemoviesfloat
1条回答
网友
1楼 · 发布于 2024-10-03 06:22:53

首先,您可以将(x==y) | (x==z)简化为x in (y, z)。另外,建议在逻辑表达式中使用逻辑or,而不是按位或|,但这不是重点

回答你的问题,是的,你只是语法有点混乱。把if放在理解的表达式部分就形成了三元结构。for循环中的等价项是:

for i in range(movies.shape[1]):
    columm.append(movies.columns[i] if movies.dtypes[i] in (float, int) else 0)

使用if作为过滤器的方法是将它放在理解的末尾:

column = [movies.columns[i] for i in range(movies.shape[1]) if movies.dtypes[i] in (float, int)]

这里的文档中描述了理解的语法:Displays for lists, sets and dictionaries。三元在Python文档中称为conditional expression

相关问题 更多 >