使用 if/else 和 for 循环将项目附加到列表推导中的列表
Appending item to list within a list comprehension using if/else and for loop
我已经知道如何根据带有 if 循环的 for 附加一个值,但我想知道是否有优化的方法。
解决方法如下:
column=[]
for i in range(movies.shape[1]):
if ((movies.dtypes[i]==float) | (movies.dtypes[i]==int)):
column.append(movies.columns[i])
print(column)
['title_year', 'aspect_ratio', 'duration', 'duration.1', 'budget', 'imdb_score', 'gross']
其中 movies 是一个数据集。
我试过这个:
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 行放在一个句子中吗?
首先,您可以将(x==y) | (x==z)
简化为x in (y, z)
。此外,建议在逻辑表达式中使用逻辑 or
而不是按位或 |
,但这不是重点。
要回答您的问题,是的,您的语法有点混乱。将 if
放在 expression 部分的推导式中生成三元。 for
循环中的等价物是:
for i in range(movies.shape[1]):
column.append(movies.columns[i] if movies.dtypes[i] in (float, int) else 0)
使用if
作为过滤器的方法是把它放在comprehension的最后:
column = [movies.columns[i] for i in range(movies.shape[1]) if movies.dtypes[i] in (float, int)]
理解的语法在此处的文档中进行了描述:Python 文档中的 Displays for lists, sets and dictionaries. A ternary is called a conditional expression。
我已经知道如何根据带有 if 循环的 for 附加一个值,但我想知道是否有优化的方法。
解决方法如下:
column=[]
for i in range(movies.shape[1]):
if ((movies.dtypes[i]==float) | (movies.dtypes[i]==int)):
column.append(movies.columns[i])
print(column)
['title_year', 'aspect_ratio', 'duration', 'duration.1', 'budget', 'imdb_score', 'gross']
其中 movies 是一个数据集。
我试过这个:
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 行放在一个句子中吗?
首先,您可以将(x==y) | (x==z)
简化为x in (y, z)
。此外,建议在逻辑表达式中使用逻辑 or
而不是按位或 |
,但这不是重点。
要回答您的问题,是的,您的语法有点混乱。将 if
放在 expression 部分的推导式中生成三元。 for
循环中的等价物是:
for i in range(movies.shape[1]):
column.append(movies.columns[i] if movies.dtypes[i] in (float, int) else 0)
使用if
作为过滤器的方法是把它放在comprehension的最后:
column = [movies.columns[i] for i in range(movies.shape[1]) if movies.dtypes[i] in (float, int)]
理解的语法在此处的文档中进行了描述:Python 文档中的 Displays for lists, sets and dictionaries. A ternary is called a conditional expression。