我需要在Python的切片表示法上有一个很好的解释(引用是一个加号).
对我来说,这种符号需要一点点提升.
它看起来非常强大,但我还没有完全了解它.
灵感来自这个问题.
为什么python中没有list.clear()方法?我在这里发现了几个问题,说正确的方法是下面的一个,但没有人说过为什么不只是一个方法.
del lst[:]
lst[:] = []
Run Code Online (Sandbox Code Playgroud)
虽然它可能违背了"蟒蛇的禅",但有一种以上的做法,对我来说,使用"list.clear()"方法似乎更为明显.它也会与dicts和sets一致,两者都有.clear().
我遇到了一些关于python-dev和python-ideas的帖子,并没有得到明确的答案(见这里(2006)和这里(2009)).Guido有没有权衡呢?在过去的4 - 5年里,它只是一个尚未解决的争论点吗?
更新: list.clear()已添加到3.3中的python中 - 请参见此处
我试图了解线程在同一进程中运行时如何与它们共享的变量空间进行交互的细微差别。以下代码显示了在不同线程中分离的两个函数:prod 和 consum。这两个函数被赋予相同的列表和锁参数:它们使用 da_list 来共享数据,并使用 lockguy 来同步/线程安全共享。
我的主要问题是:当我运行这段代码时,它打印出 (1, 0, 0, 0, 0 ...) 而不是 (1,2,3,4,5,6 ...) 我期待。当我删除 consum 函数中的 l =[0] 行时,我得到了预期的行为。为什么 l = [0] 搞砸了?当消耗完成时,da_list应该是[0]。随后调用 prod 应将 da_list 重置为 [da_int]。谢谢您的帮助。
import threading
import time
def prod(l,lock):
da_int = 0
while True:
with lock:
time.sleep(0.1)
da_int += 1
l[0] = da_int
def consum(l,lock):
data = ''
while True:
with lock:
time.sleep(0.1)
print(l[0])
l = [0]
def main():
da_list = [0]
lockguy = threading.Lock()
thread1 = threading.Thread(target = prod, args=(da_list,lockguy)) …Run Code Online (Sandbox Code Playgroud) 我有一个networkx图.我通过添加边添加节点
G.add_edge(route[i-1],route[i]);
Run Code Online (Sandbox Code Playgroud)
现在,一旦通过直接添加边创建节点,我添加一个名为的列表
G.node[route[i]]['position'] = list()
Run Code Online (Sandbox Code Playgroud)
当我一次又一次地获得相同的节点时,我会向它添加位置
G.node[route[i]]['position'].append( i - 3 )
Run Code Online (Sandbox Code Playgroud)
现在,当我想附加时,如何检查列表是否存在?做的
G.node[route[i]]['position'] = list()
Run Code Online (Sandbox Code Playgroud)
清除已有元素的列表?
编辑-----我之前的问题很混乱我想继续添加到列表中但除非列表存在,否则我无法追加,对吧?所以我必须G.node[route[i]]['position'] = list()在我的循环中这样做
所以下次当我想在另一个循环实例中添加到同一个列表时G.node[route[i]]['position'],我怎么知道列表存在而且我不必再次创建它.
编辑-----我认为我的列表本身就是关键,所以我做了
if not 'position' in G.node[route[i]]:
Run Code Online (Sandbox Code Playgroud)
它的工作原理
list = []和之间有什么区别list.clear()?
根据代码的行为和我自己的观察,list.clear()删除其条目以及用于添加其数据的条目。
例:
container.append(list)
list.clear()
Run Code Online (Sandbox Code Playgroud)
container 也将是 []
假设我my_list在python中有一个相当大的列表,我想截断它.我可以通过删除它或指定一个新列表来实现它my_list.什么是更好的方法?
my_list = range(1, 10000)
Run Code Online (Sandbox Code Playgroud)
方法1:
my_list = list()
print len(my_list) # prints 0
Run Code Online (Sandbox Code Playgroud)
方法2:
del my_list[:]
print len(my_list) # prints 0
Run Code Online (Sandbox Code Playgroud)
我觉得方法2更适合这样做,我是对的吗?
我知道你可以简单地说:
list = [a, b, c, d, e]
for index in list:
list.remove(index)
Run Code Online (Sandbox Code Playgroud)
但是使用单个命令有更快的方法:
list.remove(all)
Run Code Online (Sandbox Code Playgroud)
或类似的规定?