我遇到过这些结构,我不太清楚他们做了什么。有人可以解释一下吗?
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")
答案 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()对该列表进行理解,它将从列表中删除重复项。