相关疑难解决方法(0)

一些内置的用于在python中填充列表

我有一个大小< N的列表,我想用一个值填充大小为N.

当然,我可以使用类似下面的东西,但我觉得应该有一些我错过的东西:

>>> N = 5
>>> a = [1]
>>> map(lambda x, y: y if x is None else x, a, ['']*N)
[1, '', '', '', '']
Run Code Online (Sandbox Code Playgroud)

python list list-manipulation

91
推荐指数
8
解决办法
4万
查看次数

如何在Python中可靠地拆分字符串,当它可能不包含模式或所有n个元素时?

在Perl我能做到:

my ($x, $y) = split /:/, $str;
Run Code Online (Sandbox Code Playgroud)

无论字符串是否包含模式,它都将起作用.

在Python中,但这不起作用:

a, b = "foo".split(":")  # ValueError: not enough values to unpack
Run Code Online (Sandbox Code Playgroud)

在这种情况下防止错误的规范方法是什么?

python string split python-3.x

74
推荐指数
4
解决办法
6590
查看次数

返回None或元组并解压缩

我总是对这个事实感到恼火:

$ cat foo.py
def foo(flag):
    if flag:
        return (1,2)
    else:
        return None

first, second = foo(True)
first, second = foo(False)

$ python foo.py
Traceback (most recent call last):
  File "foo.py", line 8, in <module>
    first, second = foo(False)
TypeError: 'NoneType' object is not iterable
Run Code Online (Sandbox Code Playgroud)

事实是,为了正确解压而没有麻烦,我要么捕获TypeError,要么有类似的东西

values = foo(False)
if values is not None:
    first, second = values
Run Code Online (Sandbox Code Playgroud)

这有点烦人.有没有一个技巧可以改善这种情况(例如,在没有foo返回(无,无)的情况下将第一个和第二个设置为无)或关于像我提出的案例的最佳设计策略的建议?*变量可能吗?

python return-value

25
推荐指数
4
解决办法
1万
查看次数

拆包时是否可以指定默认值?

我有以下内容:

>>> myString = "has spaces"
>>> first, second = myString.split()
>>> myString = "doesNotHaveSpaces"
>>> first, second = myString.split()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
Run Code Online (Sandbox Code Playgroud)

如果字符串没有任何空格,我想second默认None.我目前有以下内容,但我想知道是否可以在一行中完成:

splitted = myString.split(maxsplit=1)
first = splitted[0]
second = splitted[1:] or None
Run Code Online (Sandbox Code Playgroud)

python python-3.x iterable-unpacking

11
推荐指数
3
解决办法
2737
查看次数

Python解包中的默认值

如果要解压缩的值的数量与变量列表相比太少,有没有办法获得默认值?

例如:

a, b, c = read_json(request)
Run Code Online (Sandbox Code Playgroud)

如果read_json返回三个或更多变量的数组,则此方法有效.如果它只返回两个,我在分配时会出现异常c.那么,c如果无法正确解压缩,有没有办法设置为默认值?就像是:

a, b, (c=2) = read_json(request)
Run Code Online (Sandbox Code Playgroud)

这与使用默认参数定义函数时的操作类似.

谢谢!

python arrays exception unpack

7
推荐指数
2
解决办法
3374
查看次数

将值解包为变量或无(ValueError:没有足够的值来解包)

应该如何将 aiterable解包为数量不匹配的变量?

值太多:

>>> one,two = [1,2,3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
Run Code Online (Sandbox Code Playgroud)

可以忽略

>>> one,two,*_ = [1,2,3,4]  
>>> 
Run Code Online (Sandbox Code Playgroud)

注意:“扩展可迭代解包”仅从 Python 3 开始。关于下划线

数据太少/变量多的相反情况如何:

>>> one,two,three = [1,2]   
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 2)
>>>
Run Code Online (Sandbox Code Playgroud)

被处理,特别是以便分配剩余的变量None(或其他值)?

像这样的东西:

>>> one,two,three = [1,2] or None
Traceback …
Run Code Online (Sandbox Code Playgroud)

python iterable-unpacking

7
推荐指数
3
解决办法
1145
查看次数

可迭代解包的默认值

我经常对Python的可迭代解包缺乏灵活性感到沮丧.

请看以下示例:

a, b = range(2)
Run Code Online (Sandbox Code Playgroud)

工作良好.正如预期的那样a包含0b包含1.现在让我们试试这个:

a, b = range(1)
Run Code Online (Sandbox Code Playgroud)

现在,我们得到一个ValueError:

ValueError: not enough values to unpack (expected 2, got 1)
Run Code Online (Sandbox Code Playgroud)

不理想,当期望的结果是0aNoneb.

有很多黑客可以解决这个问题.我见过的最优雅的是:

a, *b = function_with_variable_number_of_return_values()
b = b[0] if b else None
Run Code Online (Sandbox Code Playgroud)

不漂亮,可能会让Python新手感到困惑.

那么最恐怖的方式是什么?将返回值存储在变量中并使用if块?该*varname黑客?别的什么?

python python-3.x iterable-unpacking

5
推荐指数
1
解决办法
423
查看次数

安全地解压缩str.split的结果

我经常对Python的可迭代解包缺乏灵活性感到沮丧.请看以下示例:

a, b = "This is a string".split(" ", 1)
Run Code Online (Sandbox Code Playgroud)

工作良好.正如预期的那样a包含"This"b包含"is a string".现在让我们试试这个:

a, b = "Thisisastring".split(" ", 1)
Run Code Online (Sandbox Code Playgroud)

现在,我们得到一个ValueError:

ValueError: not enough values to unpack (expected 2, got 1)
Run Code Online (Sandbox Code Playgroud)

不理想,当期望的结果是"Thisisastring"aNone或更好,但""b.

有很多黑客可以解决这个问题.我见过的最优雅的是:

a, *b = mystr.split(" ", 1)
b = b[0] if b else ""
Run Code Online (Sandbox Code Playgroud)

不漂亮,并且对Python新手来说非常困惑.

那么最恐怖的方式是什么?将返回值存储在变量中并使用if块?该*varname黑客?别的什么?

python python-3.x iterable-unpacking

4
推荐指数
1
解决办法
895
查看次数