这个问题解释了它,但是Python中的集差运算的时间复杂度是多少?
前任:
A = set([...])
B = set([...])
print(A.difference(B)) # What is the time complexity of the difference function?
Run Code Online (Sandbox Code Playgroud)
我的直觉告诉我,O(n)因为我们可以遍历集合 A 并且对于每个元素,查看它是否在恒定时间内(使用哈希函数)包含在集合 B 中。
我对吗?
(这是我遇到的答案:https : //wiki.python.org/moin/TimeComplexity)
似乎有一些一致性,因为调用set()字符串似乎总是解析为相同的(非alabetical)顺序,并且两者都是
set([1,2,3]) & set([1,2,3,4])
Run Code Online (Sandbox Code Playgroud)
和它的表兄弟混在一起
set([2,3,1]) & set([4,3,1,2])
Run Code Online (Sandbox Code Playgroud)
将导致有序的set([1,2,3]).
另一方面,有点像racy,比如
from random import randint
set([randint(0,9) for x in range(3)])
Run Code Online (Sandbox Code Playgroud)
有时会给set([9, 6, 7])...
... 这里发生了什么?
如何设置查找元素比列表快得多,是否与列表中的有序维护有关?或者查找算法的集合是否与列表不同?
>>> from timeit import Timer
>>> Timer("100042 in L", "L=range(100000)").timeit(number=10000)
21.69940710067749
>>>
>>> Timer("100042 in S", "S=set(range(100000))").timeit(number=10000)
0.0006740093231201172
>>>
Run Code Online (Sandbox Code Playgroud)
有人请求指出两者之间使用的链接或算法吗?
为什么Python中允许使用嵌套字典,而不允许使用嵌套集?
人们可以嵌套字典并动态更改子字典,如下所示:
In [1]: dict1 = {'x':{'a':1, 'b':2}, 'y':{'c':3}}
In [2]: dict2 = {'x':{'a':1, 'b':2}, 'y':{'c':3}}
In [3]: dict1 == dict2
Out[3]: True
In [4]: dict2['x'] = {'d':4}
In [5]: dict1 == dict2
Out[5]: False
Run Code Online (Sandbox Code Playgroud)
另一方面,如果你试图在一个集合中放置一个集合,你会收到一个错误,说它无法完成,因为集合是一个"不可用的类型":
In [6]: set([set(['a'])])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-8-8e7d044eec15> in <module>()
----> 1 set([set(['a'])])
TypeError: unhashable type: 'set'
Run Code Online (Sandbox Code Playgroud)
但这也没有意义,因为字典也是不可用的,
In [7]: hash({'a':1})
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-44def9788331> in <module>()
----> 1 hash({'a':1})
TypeError: unhashable type: 'dict'
Run Code Online (Sandbox Code Playgroud)
当然,可以将一个冷冻集放在一个集合中, …
哪个更高效,Python中的渐近复杂度(或它们是等价的)是什么?
set.add(12)
if 12 not in somelist:
somelist.append(12)
Run Code Online (Sandbox Code Playgroud) 我试图找到9个字母的单词,当你平均分成3个部分,然后乱七八糟地,你会得到另一个9个字母的单词.
for i in nineWordList:
for j in nineWordList:
if (i[3:5] + i[0:2] + i[6:8]) == j:
correctWords.append(i)
elif (i[3:5] + i[6:8] + i[0:2]) == j:
correctWords.append(i)
elif (i[0:2] + i[6:8] + i[3:5]) == j:
correctWords.append(i)
elif (i[6:8] + i[0:2] + i[3:5]) == j:
correctWords.append(i)
elif (i[6:8] + i[3:5] + i[0:2]) == j:
correctWords.append(i)
Run Code Online (Sandbox Code Playgroud)
我就是这样做的.唯一的问题是nineWordList长68,000个元素,这需要很长时间.我怎样才能提高它,使其更有效率?
我正在尝试在列表中搜索第一次出现的字典。我创建的逻辑适用于小数据,但我有一个一百万行的列表,其他要搜索的列表元素有 1000 个元素。
data = [{'team': 'a', 'id':11}, {'team': 'b', 'id':111}, {'team': 'c', 'id':1111}]
list_to_see = ['a','c']
check = None
for index in range(len(data)):
if data[index]['team'] in list_to_see[index]:
check = data[index]['id']
break
print(check)
Run Code Online (Sandbox Code Playgroud)
#Output: 11
所以,我得到了第一个元素 Id,这正是我想要的结果。是否有任何优化的方法可以获得可以处理大数据的相同输出?谢谢
我正在阅读 geeksforgeeks 的以下示例:
# Python code to demonstrate the working of
# zip()
# initializing lists
name = [ "Manjeet", "Nikhil", "Shambhavi", "Astha" ]
roll_no = [ 4, 1, 3, 2 ]
marks = [ 40, 50, 60, 70 ]
# using zip() to map values
mapped = zip(name, roll_no, marks)
# converting values to print as set
mapped = set(mapped)
# printing resultant values
print ("The zipped result is : ",end="")
print (mapped)
Run Code Online (Sandbox Code Playgroud)
但如果你看到结果:
压缩结果为:{('Shambhavi', 3, 60), ('Astha', 2, …