返回不在列表中的元素

时间:2018-11-08 20:20:57

标签: python python-3.x

我有一个包含3个元素的列表,例如'1','2','3',我想编写一个函数,该函数返回的元素不是函数参数。例如:

 def get_char(a, b):
     crs = ['1', '2', '3']
     return something

 x = get_char('1', '2')
 x = '3'

 x = get_char('3', '2')
 x = '1'

您可以看到我要完成的工作。我知道我可以通过使用if语句来获得它,但是有没有更简单的方法呢?

5 个答案:

答案 0 :(得分:1)

以下是一般答复:

def get_chars(*args):
    chars = {'1', '2', '3'}
    return (chars^set(args)).pop()

尽管您可能需要做一些事情来处理传入3个参数或1个参数的情况。取决于您的用例。

还请注意,您可以将chars设置更改为包含更多字符,并且此功能仍然有效。


正如ShadowRanger在评论中指出的那样,设置减法可能比按位异或更有意义。像这样:

def get_chars(*args):
    return ({'1', '2', '3'} - set(args)).pop()

如果传入错误数量的参数,仍然会遇到相同的问题,您可以使用类似以下的方法进行检查:

def get_chars(*args):
    diff = {'1', '2', '3'} - set(args)
    if len(diff) != 1:
        # Handle the incorrect number of args (or use error)
        return None
    return diff.pop()

答案 1 :(得分:0)

您可以使用两个列表,一个迭代和not in函数:

x = [1,2,3]

y = [1,5,7]


def compare(original_list, list_to_compare):
    for i in original_list:
        if i not in list_to_compare:
            print(i)


compare(x,y)
# result 2, 3
compare(y,x)
*emphasized text*# result 5,3

答案 2 :(得分:0)

您可以使用ifin测试变量是否在参数列表中(此处为args):

>>> def get_char(*args):
...     crs = ['1', '2', '3']
...     for x in crs:
...             if x not in args:
...                     return x
...     return Null
... 
>>> x = get_char('1', '2')
>>> 
>>> x
'3'

这将返回crs中不存在的第一个元素,如果所有元素都存在,则返回args

答案 3 :(得分:0)

我想这可能是您要的:

BufferedSource

然后:

def elements_from_crs_not_in_args(*args): 
     crs = ['1','2','3']
     return [i for i in crs if i not in args] 

如果您打算返回单个元素(列表的第一个?)而不是列表,请返回[..] [0]

答案 4 :(得分:0)

如果char的集合相同,我将首先做两件事,我会将它们拉到函数的外面,这样就不会每次都执行。第二次使用集合操作对称差^来查找仅存在于两个列表中的一个列表中的所有元素,或者使用差来找到一个集合与另一个集合的差。最后,必须将集合转换为元组,以使集合中的第一个元素不支持索引

crs = set(['1', '2', '3'])
def get_char(a, b):
    return (crs ^ set((a,b))).pop()

print(get_char('1', '2')) #'3'

或更佳

crs = set(['1', '2', '3'])
def get_char(a, b):
     return (crs - set((a,b))).pop()

print(get_char('1', '2')) #'3'

在Python3中,您可以使用@ShadowRanger指出的set字面量

crs = {'1', '2', '3'}
def get_char(a, b):
    return (crs - {a, b}).pop()

print(get_char('1', '2')) #'3'