什么是套装?什么是“一个在我身上”做什么?

时间:2015-07-01 14:54:18

标签: python python-3.x

我遇到过这些结构,我不太清楚他们做了什么。有人可以解释一下吗?

setx = set([a for a in i])    
sety = set([y for y in j]) 

代码,用于上下文

a = int(input())  
for i in range(a):  
    i = (input())  
    j = (input())  
    setx = set([a for a in i])    
    sety = set([y for y in j])  
    if setx.intersection(sety) == set():  
        print("NO")  
    else:  
        print("YES")  

2 个答案:

答案 0 :(得分:2)

[a for a in i]list comprehension。这基本上是制作清单的简洁方法。

它们可能非常有用,或者它们可能是许多不可读代码的来源,或两者兼而有之。完整语法是

[f(i) for i in iterator if conditional(i)]

的示例:

方格列表:[i**2 for i in range(n)]

不能被5整除的正方形列表:[i**2 for i in range(n) if i**2 % 5 =! 0]

至于 set Set是python中非常有用的数据类型。它基本上是没有值的字典。所有元素必须是唯一且可清除的,并且集合不存储顺序,但检查对象是否在集合中不依赖于集合的长度。

在这种情况下,您的代码可能正在使用集合来确定两个输入是否更快,更容易编写共享任何共性。

(另外,最后:呃,发布后,我真的不知道你的代码是做什么的,但我可以肯定它不是它想要的。如果我要重写它,那就是

之类的东西
a = int(input()) 
setx = set() #initializing empty sets
sety = set() 
for _ in range(a):  #underscore often used when you don't care about what you're iterating over, just that you iterate a certain amount of times.
    setx.add(input()) #Previously, you'd just get the last input
    sety.add(input()) #I doubt that's what you wanted 
if setx.intersection(sety): #no need to compare to empty set. if set() will evaluate as false  
    print("NO")  
else:  
    print("YES")  

答案 1 :(得分:0)

Set是内置数据类型:无序唯一元素的集合,非常独特。 有关更多细节,请参阅令人惊叹的python文档:例如,请参阅[https://docs.python.org/3.5/library/stdtypes.html?highlight=set#set]

因此,使用 set()对该列表进行理解,它将从列表中删除重复项。