我写了一个简单的python程序
l=[1,2,3,0,0,1]
for i in range(0,len(l)):
if l[i]==0:
l.pop(i)
Run Code Online (Sandbox Code Playgroud)
这给了我错误'列表索引超出范围'在线 if l[i]==0:
经过调试后,我可以发现i它正在增加并且列表正在减少.
但是,我有循环终止条件i < len(l).那我为什么会收到这样的错误呢?
作为一个实验,我这样做了:
letters=['a','b','c','d','e','f','g','h','i','j','k','l']
for i in letters:
letters.remove(i)
print letters
Run Code Online (Sandbox Code Playgroud)
最后一次打印显示并非所有项目都被删除了?(每隔一个人).
IDLE 2.6.2
>>> ================================ RESTART ================================
>>>
['b', 'd', 'f', 'h', 'j', 'l']
>>>
Run Code Online (Sandbox Code Playgroud)
对此有何解释?如何重新编写以删除每个项目?
我正在尝试学习Python,我开始使用一些代码:
a = [3,4,5,6,7]
for b in a:
print a
a.pop(0)
Run Code Online (Sandbox Code Playgroud)
输出是:
[3, 4, 5, 6, 7]
[4, 5, 6, 7]
[5, 6, 7]
Run Code Online (Sandbox Code Playgroud)
我知道在我循环的时候改变数据结构并不是一个好的做法,但我想了解Python在这种情况下如何管理迭代器.
主要问题是:如果我改变状态,它如何知道它必须完成循环a?
我是Python新手并尝试使用Python 3.2.3(默认,2012年10月19日,20:13:42),linux2上的[GCC 4.6.3]
这是我的样本代码
>>> l=[1,2,3,4,5,6]
>>> for i in l:
... l.pop(0)
... print(l)
...
Run Code Online (Sandbox Code Playgroud)
我期待以下输出
1
[2, 3, 4, 5, 6]
2
[3, 4, 5, 6]
3
[4, 5, 6]
4
[5, 6]
5
[6]
6
[]
Run Code Online (Sandbox Code Playgroud)
相反,我得到了这个
1
[2, 3, 4, 5, 6]
2
[3, 4, 5, 6]
3
[4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
for循环在3转后停止迭代.有人可以解释一下原因吗?
我试图循环删除每个对象中的元素的对象列表.每个对象都是一个新行.我试图保存新文件,而不包含对象中包含的元素.我知道这可能是一项简单的任务,但我似乎无法完成这项工作.如果有人能提供帮助,将不胜感激.谢谢.
{
"business_id": "fNGIbpazjTRdXgwRY_NIXA",
"full_address": "1201 Washington Ave\nCarnegie, PA 15106",
"hours": {
"Monday": {
"close": "23:00",
"open": "11:00"
},
"Tuesday": {
"close": "23:00",
"open": "11:00"
},
"Friday": {
"close": "23:00",
"open": "11:00"
},
"Wednesday": {
"close": "23:00",
"open": "11:00"
},
"Thursday": {
"close": "23:00",
"open": "11:00"
},
"Saturday": {
"close": "23:00",
"open": "11:00"
}
},
"open": true,
"categories": ["Bars", "American (Traditional)", "Nightlife", "Lounges", "Restaurants"],
"city": "Carnegie",
"review_count": 7,
"name": "Rocky's Lounge",
"neighborhoods": [],
"longitude": -80.0849416,
"state": "PA",
"stars": 4.0,
"latitude": …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个列表的内容转移到另一个列表,但它不起作用,我不知道为什么不.我的代码看起来像这样:
list1 = [1, 2, 3, 4, 5, 6]
list2 = []
for item in list1:
list2.append(item)
list1.remove(item)
Run Code Online (Sandbox Code Playgroud)
但如果我运行它,我的输出看起来像这样:
>>> list1
[2, 4, 6]
>>> list2
[1, 3, 5]
Run Code Online (Sandbox Code Playgroud)
我的问题有三个,我猜:为什么会发生这种情况,如何让它发挥作用,我是否会忽略一个非常简单的解决方案,如"移动"声明或其他什么?
from pprint import *
sites = [['a','b','c'],['d','e','f'],[1,2,3]]
pprint(sites)
for site in sites:
sites.remove(site)
pprint(sites)
Run Code Online (Sandbox Code Playgroud)
输出:
[['a', 'b', 'c'], ['d', 'e', 'f'], [1, 2, 3]]
[['d', 'e', 'f']]
Run Code Online (Sandbox Code Playgroud)
为什么不是None,或者是空列表[]?
我有一个列表如下:
device = [('nvme2n1',),
('nvme1n1', '/local'),
('nvme0n1',),
('nvme0n1p1', '/'),
('nvme0n1p128',),
('nvme3n1',)]
Run Code Online (Sandbox Code Playgroud)
我想从这个列表中删除几个包含nvme1n1ornvme0n1p1或 nvme0n1p128or 的元组nvme0n1。
所以最终名单将有
final_device = [('nvme2n1',),('nvme3n1',)]
Run Code Online (Sandbox Code Playgroud)
尝试如下但没有工作并出现错误 "AttributeError: 'tuple' object has no attribute 'startswith'"
for word in devices[:]:
if word.startswith("nvme0n1","nvme0n1p1","nvme0n1p128"):
devices.remove(word)
Run Code Online (Sandbox Code Playgroud)
有人能帮忙吗?
我有如下问题,我尝试过但找不到正确的结果。我想以简单的方式解决它,而不使用额外的库。我没有任何数据可以分享,因为我无法建立正确的逻辑。
4对双胞胎(共8个孩子)闭着眼睛玩耍。当某个时刻到来时,随机分布的小组中的孩子们会成对地握住彼此的手。如何编写一个python脚本,列出所有可能性并标记兄弟姐妹握住对方手的概率?
list = ['a1', 'a2', 'b1', 'b2', 'c1', 'c2', 'd1', 'd2']
Run Code Online (Sandbox Code Playgroud)
我想得到这样的结果:
[a1a2, b1b2, c1c2, d1d2] - Found
[a1a2, b1b2, c1d1, c2d2] - Not found
[a1a2, b1b2, c1d2, c2d1] - Not found
[a1a2, b1b2, c1d1, c2d2] - Not found
[a1a2, b2b1, c1d1, c2d2] - Not found
...
all possible matches
...
Run Code Online (Sandbox Code Playgroud)
感谢帮助。
我有一个关于 python 中列表的内存使用情况的假设问题。我有一个很长的列表my_list,如果加载到内存中,它会消耗多个千兆字节。我想循环该列表并在迭代期间仅使用每个元素一次,这意味着我可以在循环它们后从列表中删除它们。当我循环时,我正在内存中存储其他内容,这意味着我分配的内存my_list现在需要用于其他内容。因此,理想情况下,我想在循环遍历列表元素时删除列表元素并释放内存。
I assume, in most cases, a generator would make the most sense here. I could dump my list to a csv file and then read it line by line in a for-loop. In that case, my_list would never be loaded into memory in the first place. However, let's assume for the sake of discussion I don't want to do that.
Is there a way of releasing the memory of a list as I …