将python列表转换为元组的时间复杂度是多少(反之亦然):
tuple([1,2,3,4,5,6,42])
list((10,9,8,7,6,5,4,3,1))
O(N)或O(1),即列表是否被复制,还是内部从可写状态切换到只读状态?
非常感谢!
这是一个O(N)操作,元组(列表)只是将对象从列表复制到元组。因此,您仍然可以修改内部对象(如果它们是可变的),但不能将新项目添加到元组。
复制列表需要O(N)
时间。
>>> tup = ([1, 2, 3],4,5 ,6)
>>> [id(x) for x in tup]
[167320364, 161878716, 161878704, 161878692]
>>> lis = list(tup)
内部对象仍然引用相同的对象
>>> [id(x) for x in lis]
[167320364, 161878716, 161878704, 161878692]
但是外部容器现在是不同的对象。因此,修改外部对象不会影响其他对象。
>>> tup is lis
False
>>> lis.append(10)
>>> lis, tup
([[1, 2, 3], 4, 5, 6, 10], ([1, 2, 3], 4, 5, 6)) #10 not added in tup
修改可变的内部对象将影响两个容器:
>>> tup[0].append(100)
>>> tup[0], lis[0]
([1, 2, 3, 100], [1, 2, 3, 100])
时序比较表明,列表复制和元组创建花费的时间几乎相等,但是由于创建具有新属性的新对象具有开销,因此元组创建会稍微昂贵。
>>> lis = range(100)
>>> %timeit lis[:]
1000000 loops, best of 3: 1.22 us per loop
>>> %timeit tuple(lis)
1000000 loops, best of 3: 1.7 us per loop
>>> lis = range(10**5)
>>> %timeit lis[:]
100 loops, best of 3: 2.66 ms per loop
>>> %timeit tuple(lis)
100 loops, best of 3: 2.77 ms per loop
问题内容: 使用以下代码获取字符串并将其转换为二进制: 输出: 如果我将其放到该站点(位于右侧站点)中,则会得到hello回信。我想知道它使用什么方法。我知道我可以将二进制字符串拼接成8,然后将其与相应的值进行匹配或以其他方式进行匹配。真正在寻找更简单的东西。 问题答案: 对于[ -~]Python 2 范围内的ASCII字符: 相反: 在Python 3.2+中: 相反: 要在Python中支持
问题内容: 我正在使用Android应用程序,并且要将本地时间(设备时间)转换为UTC并将其保存在数据库中。从数据库中检索它之后,我必须再次将其转换并显示在设备的时区中。谁能建议如何用Java做到这一点? 问题答案: 我使用这两种方法将本地时间转换为GMT / UTC,反之亦然,这对我来说没有任何问题。 将要转换为设备本地时间的GMT / UTC日期传递给此方法:
我正在开发Android应用程序,我想将本地时间(设备时间)转换为UTC,并将其保存在数据库中。从数据库中检索后,我必须再次将其转换并显示在设备的时区中。有人能建议如何在Java中做到这一点吗?
我正在尝试将列表转换为元组。 Google上的大多数解决方案提供以下代码: 但是,当我运行代码时,它会产生一条错误消息: TypeError:“tuple”对象不可调用 我如何解决这个问题?
问题内容: 我正在寻找一种将NumPy数组传递给Matlab的方法。 我已经设法通过使用将数组存储到图像中,然后使用加载它来做到这一点,但这当然会使矩阵包含0到256之间的值,而不是“真实”值。 将这个矩阵的乘积除以256,再加上原始NumPy数组中的最大值,可以得出正确的矩阵,但是我觉得这有点乏味。 有没有更简单的方法? 问题答案: 当然,只要使用 举个例子: 同样,有。 然后,您使用将其加载到
问题内容: 如果我有RGB小数,例如,我该怎么做才能将其转换为CMYK? 例如: 问题答案: 这是Javascript实现的Python端口。