我已经知道如何通过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句子中,因为没有它,它的标记语法错误。
那么,我可以将这3行放在一个句子中吗?
答案 0 :(得分:3)
首先,您可以将(x==y) | (x==z)
简化为x in (y, z)
。另外,建议在逻辑表达式中使用逻辑or
而不是按位OR |
,但这不重要。
要回答您的问题,是的,您只是对语法有些困惑。将if
放在理解的 expression 部分进行三元运算。 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。