现在我知道在迭代循环期间修改列表是不安全的.但是,假设我有一个字符串列表,我想自己去除字符串.替换可变值是否算作修改?
l = range(100)
for i in l:
print i,
print l.pop(0),
print l.pop(0)
Run Code Online (Sandbox Code Playgroud)
上面的python代码给出了与预期完全不同的输出.我想循环遍历项目,以便我可以在循环时跳过项目.
请解释.
两个快速的熊猫问题供您选择。
我有一个要应用过滤器的数据框列表。
countries = [us, uk, france]
for df in countries:
df = df[(df["Send Date"] > '2016-11-01') & (df["Send Date"] < '2016-11-30')]
Run Code Online (Sandbox Code Playgroud)
当我运行它时,df之后不会更改。这是为什么?如果我遍历数据帧以创建一个新列,如下所示,则可以正常工作,并更改列表中的每个df。
for df in countries:
df["Continent"] = "Europe"
Run Code Online (Sandbox Code Playgroud)作为后续问题,当我创建不同国家的数据框列表时,我注意到了一些奇怪的事情。我定义了列表,然后将转换应用于列表中的每个df。在转换了这些不同的dfs之后,我再次调用了该列表。我很惊讶地看到列表仍然指向未更改的数据帧,因此我不得不重新定义列表以更新结果。有人能解释为什么会这样吗?
我必须反转一个长度大于4的列表中的每个单词.所以我尝试了:
for word in words:
if len(word) >= 5:
word = word[::-1]
Run Code Online (Sandbox Code Playgroud)
它不起作用.但是这个:
for i in range(len(words)):
if len(words[i]) >= 5:
words[i] = words[i][::-1]
Run Code Online (Sandbox Code Playgroud)
工作良好.有什么不同?
我要再次问你另一个基本问题.:)我想通过for-loop更改列表.(抱歉打扰,但我是新的....)
这是第一个脚本:
L=[1,2,3]
i=0
for a in L:
L[i]+=1
i+=1
print(L)
print(a)
Run Code Online (Sandbox Code Playgroud)
我有:
L:[2,3,4]
a: 3
Run Code Online (Sandbox Code Playgroud)
这正是我想要的.但我注意到,如果我将脚本更改为:
L=[1,2,3]
for i in L:
i+=1
print(L)
print(i)
Run Code Online (Sandbox Code Playgroud)
我得到了:
L:[1,2,3]
i:4
Run Code Online (Sandbox Code Playgroud)
我可以理解我必须是4.但问题是为什么列表L不会改变.在我看来,列表中的对象被赋予变量i.因此变量i是可以编辑对象的人.所以基本上,列表应该改变.然而,实际上,它保持不变.
有人可以解释一下吗?
谢谢!
在下面的代码中,第一种类型的修改改变了原始列表,而在第二个列表中保持不变。为什么行为是这样?
temp = [{"a":"b"},{"c":"d"},{"e":"f"},{"a":"c"}]
for item in temp:
if "a" in item:
item["a"] = "x"
print(temp)
Run Code Online (Sandbox Code Playgroud)
temp = [{"a":"b"},{"c":"d"},{"e":"f"},{"a":"c"}]
for item in temp:
item = {}
print(temp)
Run Code Online (Sandbox Code Playgroud)
第一个的输出是 [{'a': 'x'}, {'c': 'd'}, {'e': 'f'}, {'a': 'x'}]
第二个是 [{'a': 'b'}, {'c': 'd'}, {'e': 'f'}, {'a': 'c'}]
Python 版本是 3.6.5
当以下代码没有达到我预期的效果时,我感到震惊:
lines_list = ['this is line 1\n', 'this is line 2\n', 'this is line 3\n']
for line in lines_list:
line = line.strip()
Run Code Online (Sandbox Code Playgroud)
在Perl或Java中,我的用法效果很好。Python 是具有独特行为的Python。
在 Java 中,这将起作用:
lines_list = ['this is line 1\n', 'this is line 2\n', 'this is line 3\n']
for line in lines_list:
line = line.strip()
Run Code Online (Sandbox Code Playgroud)
在 Perl 中,这将起作用:
String[] lines = {"this is line 1\n", "this is line 2\n", "this is line 3\n"};
for (String line : lines) {
line = line.trim();
} …Run Code Online (Sandbox Code Playgroud)