循环并修改变量列表

时间:2017-06-01 15:14:34

标签: python

我有很多我在脚本中早期定义的数据帧,我想迭代它们并像这样修改它们:

for df in [df_fap, df_spf, df_skin, ...]:
     df = df.filter(regex=(assay + r"[0-9]+"))

然而,这不起作用。循环结束时,不会修改数据帧的值。我偶然发现了post这个稍微相似(除了我事先定义了我的变量),但它并没有真正解决我的确切问题。谢谢!

3 个答案:

答案 0 :(得分:2)

循环变量df又分配给列表中的每个元素。如果您重新分配df,那么您已df提及其他内容。它不会影响列表。

在迭代列表时重新分配循环变量并不会改变列表,更不用说改变用于填充列表的变量了。

尝试list comprehension

new_list = [df.filter(whatever) for df in (df_fap, df_spf, df_skin, ...)]

如果您还想重新分配起始变量,可以使用:

df_fap, df_spf, df_skin, ... = new_list

你甚至可以一次性完成这两项操作:

df_fap, df_spf, df_skin, ... = [df.filter(whatever) for df in (df_fap, df_spf, df_skin, ...)]

答案 1 :(得分:1)

所以你有变量列表

[df_fap, df_spf, df_skin, ...]

当你循环“创建新变量

for df in [df_fap, df_spf, df_skin, ...]:
    df = value

你的for的每次迭代(循环)都会重置df的值,这意味着你的变量都不会改变

khelwood给出的答案意味着您将重新声明所有变量并将过滤器应用于一个

df_fap, df_spf, df_skin, ... = [df_fap, df_spf, df_skin, ...]

尝试做类似

的事情
a,b = ["apple","banana"]

在你的控制台中,khelwood的解释将有意义

答案 2 :(得分:0)

尝试

-Djava.net.preferIPv4Stack=true