0

我在想:

value = 3
s1 = {1,2,3,4,5}
s2 = {6,7,8,9,0}
s3 = {11,12,13,14,15}

if value in '..one of those sets..':
    '..give me that set..'

除了使用if/之外,还有更简单的方法elif吗?
有没有更简单的方法来获取in哪个集合/列表/元组?

4

3 回答 3

1

用于next获取包含该值的第一个集合:

value = 3
s1 = {1,2,3,4,5}
s2 = {6,7,8,9,0}
s3 = {11,12,13,14,15}

found = next(s for s in (s1, s2, s3) if value in s)
print(found)

输出

{1, 2, 3, 4, 5}
于 2021-11-04T16:19:46.733 回答
0

没有真正需要多个if/elif分支。这是单独测试每个序列的不可扩展的方法。但是如果你添加更多的序列呢?您每次都需要更改代码。

一种更简单的方法是将序列打包在一个元组中并遍历所有序列并检查它们的value位置:

for s in (s1, s2, s3):
    if value in s:
        print(s)

如果您希望该值位于多个序列中,则可以将其转换为列表理解:

sequences = [s for s in (s1, s2, s3) if value in s]
于 2021-11-04T16:44:37.470 回答
0

试试看:

# data
value = 3
s1 = {1,2,3,4,5}
s2 = {6,7,8,9,0}
s3 = {11,12,13,14,15}

if accepted_sets := [i for i in (s1, s2, s3) if value in i]:
    print(f'accepted sets: {accepted_sets}')
    print(f'first set: {accepted_sets[0]}')

输出:

accepted sets: [{1, 2, 3, 4, 5}]
first set: {1, 2, 3, 4, 5}

背叛:=操作员

if (data := server.get_data())['condition']:
    ...
data = server.get_data()
if data['condition']:
    ...

这两个代码的工作方式完全相同。这样您就不需要从服务器请求信息两次

于 2021-11-04T17:00:22.937 回答