python - 如何获取字典以及如何从 i for i in m if m 迭代中打破

标签 python

从列表变量开始:

number=[1,2,3,None,4,5]

我可以通过两种不同的方法得到相同的结果:

方法一:

result=[number for number in numbers if number]

方法 2:

result=[]
for number in numbers:
    if not number: continue
    result.append(number)

除了需要组合更多代码之外,方法 2 的执行速度似乎慢了 30%。 由于方法 1 在速度和清晰度方面均胜出,我希望更频繁地使用它。

两个问题:

问题1:

我可以使用[i for i in m if i]方法来构建字典变量吗? 因此,如果我从列表变量开始:

number=[1,2,3,None,4,5]

我怎样才能得到一个字典,其中每个列表变量号都成为字典键: 如:

result={1:None, 2:None, 3:None, 4:None, 5:None}

甚至:

result={1:{}, 2:{}, 3:{}, 4:{}, 5:{}}

问题2:

如果满足特定条件,我可以从 [i for i in m if i] 迭代中中断吗?例如:

result=[]
for number in numbers:
    if not number: continue
    if number==5: 
        result.append(number)
        break

显然我不能这样说:

result=[number for number in numbers if number and number==5 break]

第三个额外问题:[i for i in m if i]迭代的输出总是一个列表吗?如果没有,请发布一些示例。

最佳答案

问题1:你可以这样做:

result = {i: None for i in number if i}

或者:

result = {i: {} for i in number if i}

问题2:您可以使用itertools.takewhile为此:

result = [i for i in itertools.takewhile(lambda n: bool(n), number)]

问题3:如果你这样写那就可以了。但如果你写成 (i for i in number if i) 那么它就不是一个列表。在这种情况下,它是一个生成器表达式:

>>> t = (i for i in number if i)
>>> t
<generator object <genexpr> at 0x106039dc0>

这意味着您可以使用它进行迭代(for item in t:),而无需构建列表。您还可以通过调用 list(t) 将其转换回列表。

关于python - 如何获取字典以及如何从 i for i in m if m 迭代中打破,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25345142/

相关文章:

python - 在 Python 中反转字典

python - 有没有一种快捷方式可以在功能条件下在 'any' 和 'all' 之间切换?

python - python如何区分有符号和无符号数据类型?

python - 引用继承的类函数

python - 在python中的列表中搜索字符串

python - 计算特定字符串在给定单词中出现的次数

python - 具有任意数量输入 channel (多于 RGB)的卷积神经网络架构

python - 使用 ^C/KeyboardInterrupt 在子线程中中断 Python raw_input()

python - 如何在 Python 中解析命令行参数?

python - 使用 Python sqlparse 获取查询树/层次结构