Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 故障安全可变长度变量分配_Python - Fatal编程技术网

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)})