我在想:
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
哪个集合/列表/元组?
我在想:
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
哪个集合/列表/元组?
用于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}
没有真正需要多个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]
试试看:
# 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']: ...
这两个代码的工作方式完全相同。这样您就不需要从服务器请求信息两次。