以可变长度作为参数和 returns 元组的函数
function that takes variable length as argument and returns tuple
我写的代码如下:
def convTup(*args):
t = set([])
for i in args:
t.add(i)
return tuple(t)
print convTup('a','b','c','d')
print convTup(1,2,3,4,5,6)
print convTup('a','b')
预期输出:
('a', 'b', 'c', 'd')
(1, 2, 3, 4, 5, 6)
('a', 'b')
但我得到如下输出:
('a', 'c', 'b', 'd')
(1, 2, 3, 4, 5, 6)
('a', 'b')
为什么只有 ('a','b','c','d')
的元素顺序发生了变化?如何以与给定输入相同的顺序打印元组?
你可以使用它,你将有一个元组序列作为你的输入
>>> def f(*args):
p = []
[p.append(x) for x in args if x not in p]
return tuple(p)
>>> f(1, 1, 2, 3)
(1, 2, 3)
>>> f('a', 'b', 'c', 'd')
('a', 'b', 'c', 'd')
此函数将创建一个 唯一元素列表并跟踪它们的顺序 然后 return 它作为一个元组。
您可以使用 set 而不是 list 来查看相同的功能。集合不会跟踪元素的输入顺序。
>>> def tup1(*args):
l = {x for x in args}
return tuple(l)
>>>
>>> tup1('a', 'b', 'c', 'd')
('a', 'c', 'b', 'd')
如果您在多个地方使用它,您可以实现自己的 SortedSet 集合。
这应该可以满足您的需要:
def convTup(*args):
return sorted(tuple(set(args)), key=lambda x: args.index(x))
所以你把args转成默认排序的set
,然后转成tuple
,最后把tuple
按照原来的顺序排序。
所以,准确地说,这个函数是按出现顺序排序的,只考虑元素在 args 中的第一次出现。
我写的代码如下:
def convTup(*args):
t = set([])
for i in args:
t.add(i)
return tuple(t)
print convTup('a','b','c','d')
print convTup(1,2,3,4,5,6)
print convTup('a','b')
预期输出:
('a', 'b', 'c', 'd')
(1, 2, 3, 4, 5, 6)
('a', 'b')
但我得到如下输出:
('a', 'c', 'b', 'd')
(1, 2, 3, 4, 5, 6)
('a', 'b')
为什么只有 ('a','b','c','d')
的元素顺序发生了变化?如何以与给定输入相同的顺序打印元组?
你可以使用它,你将有一个元组序列作为你的输入
>>> def f(*args):
p = []
[p.append(x) for x in args if x not in p]
return tuple(p)
>>> f(1, 1, 2, 3)
(1, 2, 3)
>>> f('a', 'b', 'c', 'd')
('a', 'b', 'c', 'd')
此函数将创建一个 唯一元素列表并跟踪它们的顺序 然后 return 它作为一个元组。
您可以使用 set 而不是 list 来查看相同的功能。集合不会跟踪元素的输入顺序。
>>> def tup1(*args):
l = {x for x in args}
return tuple(l)
>>>
>>> tup1('a', 'b', 'c', 'd')
('a', 'c', 'b', 'd')
如果您在多个地方使用它,您可以实现自己的 SortedSet 集合。
这应该可以满足您的需要:
def convTup(*args):
return sorted(tuple(set(args)), key=lambda x: args.index(x))
所以你把args转成默认排序的set
,然后转成tuple
,最后把tuple
按照原来的顺序排序。
所以,准确地说,这个函数是按出现顺序排序的,只考虑元素在 args 中的第一次出现。