可以在一个推导式列表中同时得到两个值吗?



我可以有一个列表获得[y, z]在同一时间与这样的理解列表?

default_list = [y,z for x,y,z in df_acc[['acc_number', 'password', 'server']].values if x == default_acc]

上面的代码给了我一个语法错误。正确的答案是什么?

可以,但需要嵌套for:

>>> default_list = [elem for x,y,z in df_acc[['acc_number', 'password', 'server']].values
for elem in (x, y) if x == default_acc]

但是如果它是一个DataFrame,那么这样做会更有效:

>>> df_acc.loc[df['acc_number'].eq(default_acc), ['acc_number', 'password']].stack().tolist()

如果你特别想要list comprehension,有其他的选择,不去嵌套循环,使用itertools.chain.from_iterable

>>> from itertools import chain
>>> list(chain.from_iterable((y,z) 
for x,y,z in df_acc[['acc_number', 'password', 'server']].values 
if x == default_acc))

此外,如果您使用的是pandas 0.24.0+版本,当从dataframe转换到numpy数组时,考虑切换到pandas.DataFrame.to_numpy()而不是pandas.DataFrame.values,按照pandas的建议,可以在这里和这里看到

最新更新