我正在努力学习Python,虽然我设法找到了当前问题的答案,但我想知道如何在将来更好地找到答案。你知道吗
我的目标是将字符串列表作为输入,并返回一个字符串,其字符是字符串中字符的并集,例如
unionStrings( ("ab", "bc"))
将返回“abc”。你知道吗
我是这样实现的:
def unionStrings( strings ):
# Input: A list of strings
# Output: A string that is the (set) union of input strings
all = set()
for s in strings:
all = all.union(set(s))
return "".join(sorted(list(all)))
我觉得for循环是不必要的,于是就寻找更整洁、更具Python性的(?),改进。你知道吗
第一个问题:我无意中使用了class方法set.union()
,而不是set1.union(set2)
。我应该在标准Python文档中找到这个吗?我没能在那里找到它。你知道吗
所以我试着用集合.联合()像这样:
>>> set.union( [set(x) for x in ("ab","bc")] )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: descriptor 'union' requires a 'set' object but received a 'list'
我又一次跌跌撞撞,终于发现我应该这样称呼它:
>>> set.union( *[set(x) for x in ("ab","bc")] )
set(['a', 'c', 'b'])
第二个问题:我认为这意味着set.union
被(有效地)声明为
set.union( *sets)
而不是
set.union( setsList )
对吗?(我还在学习如何使用splat'*')
第三个问题:在哪里可以找到set.union()
签名的文档?我在set/freezeset文档中没有看到它,而且我无法让inspect
模块给我任何东西。我甚至不确定set
是否是一个模块,它似乎是一个类型。它是在模块中定义的,还是什么?你知道吗
谢谢你读了我复杂的问题。更多的是“如何浏览Python文档?”而不是“如何在Python代码中做到这一点?”。你知道吗
回应乔尔夏普的评论:
哦!我习惯C++,在这里定义单独的静态和实例方法。既然你解释了,我真的知道发生了什么。你知道吗
我唯一能做的不同就是把它写成
t = set.union( *[set(x) for x strings] )
return "".join(sorted(t))
因为当strings[0]
和strings[1:]
中的字符串在功能上没有扮演不同的角色时,用不同的方式来处理它们让我很恼火。如果我必须对其中一个调用set()
,我宁愿对所有的调用,因为union()
无论如何都会这样做。但那只是风格,对吧?你知道吗
这里有几个问题。首先,你应该知道:
相当于:
对于实例方法。可以在类上调用方法并显式提供实例,也可以只在实例上调用它。你知道吗
由于历史原因,许多标准库和内置类型不遵循类名的
UppercaseWords
约定,但它们是类。因此与相同
set
方法特别棘手,因为它们经常被使用。set.method(arg1, arg2, ...)
要求arg1
到已经是set
方法的实例,但所有其他参数都将被转换(从2.6开始)。你知道吗这在
set
文档中没有直接介绍,因为它适用于所有情况;Python是非常一致的。你知道吗关于需要“splat”的问题,请注意文档中说:
而不是
也就是说,每个iterable都是一个独立的参数,因此需要打开iterable列表。你知道吗
因此,您的职能可以是:
或者,避免使用
strings[0]
的特殊大小写:相关问题 更多 >
编程相关推荐