小编ywb*_*aek的帖子

在 dict.items() 中检查成员资格的时间复杂度是多少?

在 dict.items() 中检查成员资格的时间复杂度是多少?

根据文档

键视图是类似设置的,因为它们的条目是唯一且可散列的。 如果所有值都是可散列的,因此 (key, value) 对是唯一且可 散列的,那么项目视图也是类似集合的。(值视图不被视为类集合,因为条目通常不是唯一的。)对于类集合视图,为抽象基类 collections.abc.Set 定义的所有操作都可用(例如,==、< , 或 ^)。

所以我用下面的代码做了一些测试:

from timeit import timeit

def membership(val, container):
    val in container

r = range(100000)
s = set(r)
d = dict.fromkeys(r, 1)
d2 = {k: [1] for k in r}
items_list = list(d2.items())

print('set'.ljust(12), end='')
print(timeit(lambda: membership(-1, s), number=1000))
print('dict'.ljust(12), end='')
print(timeit(lambda: membership(-1, d), number=1000))
print('d_keys'.ljust(12), end='')
print(timeit(lambda: membership(-1, d.keys()), number=1000))
print('d_values'.ljust(12), end='')
print(timeit(lambda: membership(-1, d.values()), number=1000))
print('\n*With hashable dict.values')
print('d_items'.ljust(12), end='')
print(timeit(lambda: …
Run Code Online (Sandbox Code Playgroud)

python dictionary time-complexity python-3.x

20
推荐指数
2
解决办法
1375
查看次数

检查元组成员的时间复杂度是多少?

x in data_structure在字典、列表和集合中检查成员资格 ( ) 的时间复杂度在此处列出:http : //wiki.python.org/moin/TimeComplexity

  • 字典 - O(1)
  • 列表 - O(n)
  • 设置 - O(1)

但是,我在任何 Python 文档中都找不到元组的那个。我尝试了以下代码来检查自己:

import time 

l = list(range(10000000))
t = tuple(range(10000000))
s = set(range(10000000))

start = time.perf_counter()  
-1 in s
elapsed = time.perf_counter() 
e = elapsed - start 
print("Time spent in set is: ", e)

start = time.perf_counter()  
-1 in l
elapsed = time.perf_counter() 
e = elapsed - start 
print("Time spent in list is: ", e)


start = time.perf_counter()  
-1 in …
Run Code Online (Sandbox Code Playgroud)

python membership tuples time-complexity python-3.x

4
推荐指数
1
解决办法
492
查看次数

编写镶木地板文件时如何避免空文件?

我正在使用 Spark Structured Streaming 从 Kafka 队列中读取数据。从卡夫卡我看完后正在申请filterdataframe。我正在将此过滤后的数据框保存到镶木地板文件中。这会生成许多空的镶木地板文件。有什么办法可以停止写入空文件吗?

df = spark \
    .readStream \
    .format("kafka") \
    .option("kafka.bootstrap.servers", KafkaServer) \
    .option("subscribe", KafkaTopics) \
    .load()

Transaction_DF = df.selectExpr("CAST(value AS STRING)")

decompDF = Transaction_DF.select(zip_extract("value").alias("decompress"))
filterDF = decomDF.filter(.....) 

query = filterDF .writeStream \
    .option("path", outputpath) \
    .option("checkpointLocation", RawXMLCheckpoint) \
    .start()
Run Code Online (Sandbox Code Playgroud)

apache-spark pyspark spark-structured-streaming

2
推荐指数
2
解决办法
9622
查看次数

检查可迭代列表中的 NoneTypes

我想遍历一个可迭代列表,但要求某些元素可以是 type None

这可能看起来像这样:

none_list = [None, [0, 1]]

for x, y in none_list:
    print("I'm not gonna print anything!")
Run Code Online (Sandbox Code Playgroud)

但是,这会提示TypeError: 'NoneType' object is not iterable.

目前,我发现了错误并在NoneType之后处理。对于我的用例,这会导致大量重复的代码,因为我基本上替换了这些None值并在 for 循环中执行与最初计划相同的操作。

try:
    for x, y in none_list:
        print("I'm not gonna print anything!")
except TypeError:
    print("But I will!")
    # Deal with NoneType here
Run Code Online (Sandbox Code Playgroud)

问题: 忽略初始循环中的值TypeError并检查None值的最佳方法是什么?

python iterable typeerror try-except nonetype

2
推荐指数
1
解决办法
51
查看次数

为什么删除对可迭代对象的引用后循环会迭代?

我在 Windows 10 上使用 Python 3.8.2。
我有以下代码:

x = range(5)

for i in x:
    print(i)
    del x
Run Code Online (Sandbox Code Playgroud)

预期输出:

0
Traceback (most recent call last):
  File "C:\Users\Students\test.py", line 3, in <module>
    for i in x:
NameError: name 'x' is not defined
Run Code Online (Sandbox Code Playgroud)

实际输出:

0
1
Traceback (most recent call last):
  File "C:\Users\Students\test.py", line 5, in <module>
    del x
NameError: name 'x' is not defined
Run Code Online (Sandbox Code Playgroud)

在第一次迭代中,我期望del x会删除,x以便在第二次迭代中它会给我行错误,for i in x:.
然而,它不断迭代,打印出1,然后给我错误提示,del x
看起来它对任何可迭代对象的工作方式都是相同的。我用字典、集合、元组和列表进行了测试。 …

python loops reference del python-3.x

1
推荐指数
1
解决办法
111
查看次数

Python将元组列表转换为具有多个元组值的字典

我不知道该怎么办,因为我无法附加元组,我只是将它显示为默认列表

Dict = dict()
def convert(list_tup):
    for a,b,c in list_tup:
        letters = a,b 
        number = c
        Dict.setdefault(number,[]).append(letters)  
        # I only want a multiple tuple values not list of tuple
    return Dict
strings = [('w', 'x','2'), ('y', 'z', '3')]
print(convert(strings))
Run Code Online (Sandbox Code Playgroud)

它打印 {'2': [('w', 'x')], '3': [('y', 'z')]}

如何在一个键中添加多个元组作为值?

我希望我的输出是这样的:

{'2': ('w', 'x'), '3': ('y', 'z')}
Run Code Online (Sandbox Code Playgroud)

python python-3.x

1
推荐指数
1
解决办法
214
查看次数

使用列表范围执行循环

我正在根据用户输入创建一个正整数列表。该列表将有 5 个值。在负输入的情况下,该值不会进入列表并发出错误消息并再次询问该数字。我的代码遇到的问题是循环在执行 5 次后下降。然而,我希望它继续运行,直到我得到 5 个正数。

lists = []

for i in range(5):
  s = int(input('Enter a number: '))
  if s >= 0:
    lists.append(s)
  else:
    print("Enter a valid number")

print(lists)
Run Code Online (Sandbox Code Playgroud)

python for-loop

0
推荐指数
1
解决办法
45
查看次数