我正在迭代Python中的元组列表,并且如果它们符合某些条件,我会尝试删除它们.
for tup in somelist:
if determine(tup):
code_to_remove_tup
Run Code Online (Sandbox Code Playgroud)
我应该用什么代替code_to_remove_tup?我无法弄清楚如何以这种方式删除项目.
我注意到我写的一个Python脚本是松散的,并将其追溯到一个无限循环,循环条件是while line is not ''.在调试器中运行它,事实证明该行''.当我改为!=''而不是is not '',它工作得很好.
另外,通常认为默认情况下使用'=='会更好,即使在比较int或Boolean值时也是如此?我一直喜欢使用'是'因为我发现它更美观和pythonic(这就是我陷入这个陷阱...),但我想知道它是否只是为了保留当你关心找到两个具有相同id的对象.
我提出了我的教授在课堂上展示的问题,我的O(n*log(n))解决方案:
给出一个n我们想要执行以下n-1时间的数字列表:
x,y从列表中提取两个最小元素并显示它们z,在哪里z = x+y z回列表为O(n*log(n))和建议数据结构和算法O(n)
解:
我们将使用最小堆:
仅创建一次堆就需要O(n).之后,提取两个最小元素将采用O(log(n)).放置z到堆中将采取为O(log(n))的.
执行上述n-1时间需要O(n*log(n)),因为:
O(n)+O(n?(logn+logn ))=O(n)+O(n?logn )=O(n?logn )
Run Code Online (Sandbox Code Playgroud)
但我怎么能在O(n)中做到这一点?
编辑:
通过说:" x,y从列表中提取两个最小元素并呈现它们 ",我的意思是printf("%d,%d" , x,y),当前列表中的最小元素x和y位置.
我有一个列表列表,如我附上的代码.如果有任何常见值,我想链接每个子列表.然后,我想用列表的精简列表替换列表列表.示例: 如果我有一个[[1,2,3],[3,4]]我想要的列表[1,2,3,4].如果我有[[4,3],[1,2,3]]我想要的[4,3,1,2].如果我有[[1,2,3],[a,b],[3,4],[b,c]]我想要[[1,2,3,4],[a,b,c]]或者[[a,b,c],[1,2,3,4]]我不在乎哪一个.
我几乎在那里......
我的问题是,当我有一个像[[1,2,3],[10,5],[3,8,5]]我想要的情况,[1,2,3,10,5,8]但我得到了我当前的代码[1,2,3,8,10,5]
这是我的代码:
import itertools
a = [1,2,3]
b = [3,4]
i = [21,22]
c = [88,7,8]
e = [5,4]
d = [3, 50]
f = [8,9]
g= [9,10]
h = [20,21]
lst = [a,b,c,i,e,d,f,g,h,a,c,i]*1000
#I have a lot of list but not very many different lists
def any_overlap(a, b):
sb = set(b)
return any(itertools.imap(sb.__contains__, a))
def find_uniq(lst): …Run Code Online (Sandbox Code Playgroud) 有谁知道Python(可能是2.7)是否有内置的linkedList数据结构?我知道队列是使用list实现的,并且没有堆栈(有LIFO队列).
我知道在c ++中它已经存在
#include <list>
现在我很想知道它是否也存在于python中.
什么是最好的Python相当于Common Lisp的maplist功能?从地图列表文档:
maplist与mapcar类似,不同之处在于该函数应用于列表的连续子列表.函数首先应用于列表本身,然后应用于每个列表的cdr,然后应用于每个列表的cdr的cdr,依此类推.
示例(伪代码,未测试):
>>> def p(x): return x
>>> maplist(p, [1,2,3])
[[1, 2, 3], [2, 3], [3]]
Run Code Online (Sandbox Code Playgroud)
注:传递给的参数p在上面的例子中会列表[1, 2, 3],[2, 3],[3],即,p不适用于这些列表的元素.例如:
>>> maplist(lambda l: list(reversed(l)), [1,2,3])
[[3, 2, 1], [3, 2], [3]]
Run Code Online (Sandbox Code Playgroud) 我曾尝试一些简单的实验机Python列表的性能链表实现,如比较本.
本机python列表总是比非本机链表更快(根据理论).
from linkedlist import *
import time
a = LinkedList()
b = []
for i in range(1000000):
b.append(i)
a.add_first(i)
t0 = time.clock()
a.remove(10)
t1 = time.clock()
b.remove(10)
t2 = time.clock()
print t1-t0
print t2-t1
Run Code Online (Sandbox Code Playgroud)
我在上面的测试中得到的结果是:
原生链表= 2.00000000001e-05
python list = 0.005576
非本地链表= 3.90000000001e-05
所以,我想知道为什么Python没有原生的Linked List数据结构.在Python的情况下,它在我看来,从算法来讲,使用Linked List而不是标准列表来加速标准库的某些方面可能是有用的.
我的理解是List数据结构是该语言的一个关键构建块,它使代码更易于维护,并且易于优化以专注于该数据结构.
还有其他原因吗?
像链接列表这样的数据结构是纯粹用于实际编程的学术内容还是您真正使用它们?它们是泛型所涵盖的东西,因此您不需要构建它们(假设您的语言具有泛型)?我不是在讨论理解它们是什么的重要性,只是在学术界之外使用它们.我从前端Web请求后端数据库透视图.我确定有人在某处建造这些.我是从我的背景中问的.
谢谢.
编辑:泛型是否因此您不必构建链接列表等?
我正在练习算法,我已经坚持了几天这个问题.当我测试我的解决方案时,我仍然是错误的.这是问题陈述:
纽约华尔街以其令人叹为观止的摩天大楼而闻名.但是下雨的季节即将到来,今年将落在建筑物上的水量将会很大.由于每栋建筑物都被固定在左侧和右侧的建筑物上(除了第一个和最后一个),只有当建筑物的高度高于建筑物的高度时,水才会从建筑物中泄漏出来.向左或向右(华尔街边缘的高度为0).所有建筑物的宽度均为1米.从左到右给出华尔街建筑物的高度(以米为单位),您的任务是打印到华尔街建筑物上的总水量(立方米)标准输出(标准输出) .
输入示例:
heights: [9 8 7 8 9 5 6]
Run Code Online (Sandbox Code Playgroud)
示例输出:
5
Run Code Online (Sandbox Code Playgroud)
说明: 在这个例子中,在第一个和第五个建筑物之间有4立方米的水(第二个是1个,第三个是2个,第四个是1个),第五个和第七个建筑之间有1个立方米水(在第六栋楼).
我解决这个问题的方法是找到全局最大值,并使用这些最大值的差异来计算积水量.我考虑到最后使用local_water变量可能遗漏的水.任何人都可以帮我找到算法或代码中的错误吗?
注意:我正在寻找一种只能通过每个元素一次的解决方案
这是我输入错误的输入:
heights: [8,8,4,5]
Run Code Online (Sandbox Code Playgroud)
这个输入应该产生1,而不是我的答案0.
这是我的代码:
def skyscrapers(heights):
heights.insert(0,0)
heights.append(0)
local_max = 0
global_max = 0
total_water = 0
local_water = 0
end_water = []
# end_water records water heights to be used for finding
# water between the final global maximum and
# subsequent local maximums. These potential values are
# stored in local_water.
for i in range(1, …Run Code Online (Sandbox Code Playgroud) python ×7
algorithm ×4
linked-list ×3
arrays ×2
comparison ×1
equality ×1
iteration ×1
lisp ×1
list ×1
math ×1
nested-lists ×1
python-2.7 ×1
python-2.x ×1
string ×1