Python 故障安全可变长度变量分配
其思想是根据值的长度分配变量 我试过这样的东西Python 故障安全可变长度变量分配,python,Python,其思想是根据值的长度分配变量 我试过这样的东西 values_tuple = ((1, 2, 3), (1, 2), (1, 2, 3), (1,), ()) for var1, var2, var3 in values_tuple: print('var1', var1, 'var2', var2, 'var3', var3) 这显然是失败的 这是当前的工作代码 values_tuple = ((1, 2, 3), (1, 2), (1, 2, 3), (1,), ()) for v
values_tuple = ((1, 2, 3), (1, 2), (1, 2, 3), (1,), ())
for var1, var2, var3 in values_tuple:
print('var1', var1, 'var2', var2, 'var3', var3)
这显然是失败的
这是当前的工作代码
values_tuple = ((1, 2, 3), (1, 2), (1, 2, 3), (1,), ())
for values in values_tuple:
if values:
var1 = var2 = var3 = None
var1 = values[0]
if len(values) > 2:
var3 = values[2]
elif len(values) > 1:
var2 = values[1]
print('var1', var1, 'var2', var2, 'var3', var3)
有什么捷径可以做到这一点吗?
上面的例子是为了简单的解释
详细的解释可能是这样的
values_tuple = ((1, 2, 3), (1, 2), (1, 2, 3), (1,), ())
for var1, var2, var3 in values_tuple:
print('var1', var1, 'var2', var2, 'var3', var3)
输入
您可以使用
t+(无,)*(n-len(t))
将元组填充到预期长度,其中n
是所需的长度。例如:
>>> t = (1, 2)
>>> t + (None,) * (3 - len(t))
(1, 2, None)
>>> t = (1,)
>>> t + (None,) * (3 - len(t))
(1, None, None)
因此:
您只需枚举
values\u元组
,并使用它来创建变量名,无需创建单独的变量
print(*(" ".join(f"var{i} {n}" for i, n in enumerate(x, 1)) for x in values_tuple), sep="\n")
不过,在这里不使用嵌套竞争可能更具可读性
for x in values_tuple:
print(*(" ".join(f"var{i} {n}" for i, n in enumerate(x, 1)))
使用itertools的备选答案:
import itertools
values_tuple = ((1, 2, 3), (1, 2), (1, 2, 3), (1,), ())
for var1,var2,var3 in zip(*itertools.zip_longest(*values_tuple)):
print('var1', var1, 'var2', var2, 'var3', var3)
谢谢大家的帮助。这是我最终得到的代码
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
for row in soup.select('table tbody tr'):
keys = ['file', 'approve', 'launch']
values = row.select('td')[1].stripped_strings
print({k: v for k, v in zip(, values)})
var1,var2,var3=值+(无,)*(3-len(值))
…?但是有必要打开那些元组吗…?谢谢。是的,有必要解包这些元组。这只是样品。实际代码使用html表,并根据当前的值为它们分配键,最后转换为jsonAre您正在寻找print(*(“”.join(f“var{i}{n}”表示i,n在枚举(x,1)中)表示x在值组中),sep=“\n”)
@deceze谢谢。这很有效。你能把这个作为答案吗?@Sayse。不。我需要它们作为变量。或者作为字典。我们可以将其转换为dict,比如[{'var1':1,'var2':2},{'var1':…}]
@RahulPatel-[{f“var{i}]:n代表i,n代表枚举(x,1)}中的n代表值组中的x]
谢谢。这正是我想要的。如果元组中没有一个有3个项,那就失败了……那么你为什么要首先使用var1到var3?@deceze:你是对的。在我的情况下,行中可能没有3个项目。
import itertools
values_tuple = ((1, 2, 3), (1, 2), (1, 2, 3), (1,), ())
for var1,var2,var3 in zip(*itertools.zip_longest(*values_tuple)):
print('var1', var1, 'var2', var2, 'var3', var3)
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
for row in soup.select('table tbody tr'):
keys = ['file', 'approve', 'launch']
values = row.select('td')[1].stripped_strings
print({k: v for k, v in zip(, values)})