标签: set-comprehension

为什么Python中没有元组理解?

众所周知,有列表理解,比如

[i for i in [1, 2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)

并且有字典理解,比如

{i:j for i, j in {1: 'a', 2: 'b'}.items()}
Run Code Online (Sandbox Code Playgroud)

(i for i in (1, 2, 3))
Run Code Online (Sandbox Code Playgroud)

将最终成为一个发电机,而不是tuple理解.这是为什么?

我的猜测是a tuple是不可变的,但这似乎不是答案.

python tuples list-comprehension dictionary-comprehension set-comprehension

289
推荐指数
7
解决办法
9万
查看次数

Python集合理解

所以我在家庭作业中遇到了这两个问题而且我被困在第二个问题上.

  1. 使用Python集合理解(Python相当于Set Builder表示法)生成一组小于100的所有素数.回想一个素数是一个大于1的整数,不能被除整数以外的任何整数整除.本身和1.将您的素数集存储在变量中(您将需要它用于其他部分).输出您的素数组(例如,使用打印功能).

  2. 使用Python集合理解来生成一组有序对(长度为2的元组),它由所有由小于100的素数组成的素数对组成.素数对是一对连续的奇数,它们都是素数.将您的Prime Pairs集存储在变量中.你的1号组将非常有帮助.输出您的Prime对的集合.

对于第一个,这完美地工作:

r= {x for x in range(2, 101) 
if not any(x % y == 0 for y in range(2, x))} 
Run Code Online (Sandbox Code Playgroud)

但是,我对第二个问题很难过.我想我可能不得不采取一些东西的笛卡尔积,但我只是不确定.

这让我有点接近,但我只想要连续对.

cart = { (x, y) for x in r for y in r
     if x < y }
Run Code Online (Sandbox Code Playgroud)

python set set-comprehension

69
推荐指数
3
解决办法
9万
查看次数

python Set Comprehensions如何工作?

Q1 - 以下是set()a generator expression还是a set comprehension?(或者它们是否相同?如果是这样,那么list&dictcomprehensions是否也在发电机上进行相应的类型转换?)

my_set = {x for x in range(10)}
Run Code Online (Sandbox Code Playgroud)

Q2 - 评估是否考虑重复值,然后通过应用删除它们set()

dup_set = {x for x in [0, 1, 2, 0, 1, 2]}
Run Code Online (Sandbox Code Playgroud)

理解是否比常规for循环更好地执行(速度方面)?

更新 - 我尝试timeit用于速度比较.我不确定我是否只是(公平).

C:\>python -m timeit "s = set()" "for x in range(10):" "
  s.add(x)"
100000 loops, best of 3: 2.3 usec per loop

C:\>python -m timeit "s = {x for x …
Run Code Online (Sandbox Code Playgroud)

python generator set set-comprehension

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

2.6的python set comprehension

我正在尝试2.6的集合理解,并遇到了以下两种方式.我认为第一种方法比第二种方法更快,timeit否则建议.为什么第二种方法更快,即使第二种方法有一个额外的列表实例化后跟一组实例化?

方法1:

In [16]: %timeit set(node[0] for node in pwnodes if node[1].get('pm'))
1000000 loops, best of 3: 568 ns per loop
Run Code Online (Sandbox Code Playgroud)

方法2:

In [17]: %timeit set([node[0] for node in pwnodes if node[1].get('pm')]) 
1000000 loops, best of 3: 469 ns per loop
Run Code Online (Sandbox Code Playgroud)

哪里pwnodes = [('e1', dict(pm=1, wired=1)), ('e2', dict(pm=1, wired=1))].

python set set-comprehension

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

f字符串内部的字典/集合理解

在python 3.6+中的f字符串中是否可能有字典或设置理解力?

在语法上似乎是不可能的:

names = ['a', 'b', 'c']
pks = [1, 2, 3]

f"{{name : pk for name, pk in zip(names, pks)}}"
Run Code Online (Sandbox Code Playgroud)

这将返回:

{name : pk for name, pk in zip(names, pks)}
Run Code Online (Sandbox Code Playgroud)

这是预期的行为,双括号会在输出中产生文字括号,因为不对表达式求值。

有没有人找到一种解决方法来允许在f字符串内部进行字典/集合理解?

python dictionary-comprehension set-comprehension f-string

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

嵌套在Dict理解中的Python集合理解

我有一个元组列表,其中每个tuple包含一个string和一个数字形式:

[(string_1, num_a), (string_2, num_b), ...]
Run Code Online (Sandbox Code Playgroud)

字符串不是唯一的,数字也是如此,例如(string_1 , num_m)(string_9 , num_b)可能存在于列表中.

我正在尝试使用字符串作为键创建一个字典,并使用该字符串作为值创建一组所有数字:

dict = {string_1: {num_a, num_m}, string_2: {num_b}, ...}
Run Code Online (Sandbox Code Playgroud)

我已经成功地使用嵌套集合理解的以下字典理解:

#st_id_list = [(string_1, num_a), ...]
#st_dict = {string_1: {num_a, num_m}, ...} 
st_dict = {
    st[0]: set(
        st_[1]
        for st_ in st_id_list
        if st_[0] == st[0]
    )
    for st in st_id_list
}
Run Code Online (Sandbox Code Playgroud)

只有一个问题:st_id_list长达18,000个项目.这段代码运行500个元组的列表只需不到10秒,但运行完整的18,000个元组需要12分钟以上.我必须认为这是因为我在dict理解中嵌套了一套理解.

有没有办法避免这种情况,或者更聪明的方法呢?

python nested dictionary-comprehension set-comprehension

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

设置理解不符合预期

需要帮助解释为什么此代码段不会像我期望的那样返回

>>> a = 1
>>> v = ["a", "b", "c"]
>>> {e for e in v if locals().get(e) is None}
set(['a', 'c', 'b'])
Run Code Online (Sandbox Code Playgroud)

我希望它能够返回set(['c', 'b']),就像我建立一个列表一样

>>> [e for e in v if locals().get(e) is None]
['b', 'c']
Run Code Online (Sandbox Code Playgroud)

python python-2.7 set-comprehension

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

在Python中设置理解并测试正在创建的集合中的成员资格

这实际上是关于集合理解的语义的问题,但我首先需要解释上下文.我正在尝试创建一组新的元组,其中touple中的配对值是唯一的,无论对中的值的顺序如何.简化我的实际程序,我所拥有的是类似的{(1, 2), (2, 1), (3, 4)},我想得到的{(1, 2), (3, 4)}

我尝试过这样的事情:

oldSet = {(1, 2), (2, 1), (3, 4)}

newSet = set()
newSet = {(val1, val2) for (val1, val2) in oldSet if not (val2, val1) in newSet}
Run Code Online (Sandbox Code Playgroud)

然而,newSet就是{(1, 2), (2, 1), (3, 4)},这意味着什么是错我的条件表达式.我对理解的理解表明,以上是这样的语法糖:

newSet =  set()
for (val1, val2) in oldSet:
  if not (val2, val1) in newSet:
    newSet.add((val1, val2))
Run Code Online (Sandbox Code Playgroud)

这种传统的循环结构工程(newSet{(1, 2), (3, 4)}).是否存在导致条件在newSet任何成员之前被评估的理解?我对Python很新,所以我想知道是否有一些我想念的微妙内容.

谢谢!

python python-3.x set-comprehension

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

这个字典中的for循环如何正常工作?

目前我正在通过这个在线课程学习Python文本情感模块,讲师没有详细解释这段代码是如何工作的.我试着单独搜索每一段代码,试着拼凑他是怎么做的,但这对我来说毫无意义.

  1. 那么这段代码是如何工作的呢?为什么字典括号中有for循环?

  2. 什么是背后的逻辑x之前,for y in emotion_dict.values()那么for x in y在结束了吗?

  3. emotion_dict=emotion_dict括号内的目的是什么?不emotion_dict会这样做吗?

     def emotion_analyzer(text,emotion_dict=emotion_dict):
     #Set up the result dictionary
         emotions = {x for y in emotion_dict.values() for x in y}
         emotion_count = dict()
         for emotion in emotions:
             emotion_count[emotion] = 0
    
         #Analyze the text and normalize by total number of words
         total_words = len(text.split())
         for word in text.split():
              if emotion_dict.get(word):
                   for emotion in emotion_dict.get(word):
                       emotion_count[emotion] += 1/len(text.split())
         return emotion_count
    
    Run Code Online (Sandbox Code Playgroud)

python dictionary python-3.x set-comprehension

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

是否可以使用集合操作进行Python-Set-Comprehension?

这是我的代码.

s = set()
for x in [ {1,2}, {3,4}, {5,1} ]:
    s |= x
Run Code Online (Sandbox Code Playgroud)

它回来了set([1, 2, 3, 4, 5]).

在这种情况下是否可以使用集合理解?我怎么写得更短?

python set set-comprehension

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