我很困惑为什么我可以分配/解包split()
的回复
适当数量的变量,但同样在a中使用失败
使用格式化指令打印字符串。
,例如:
In [202]: s
Out[202]: 'here are 4 values'
In [203]: s.split()
Out[203]: ['here', 'are', '4', 'values']
这可以按预期工作:
In [204]: a, b, c, d = s.split()
In [205]: print '%s %s %s %s' % (a, b, c, d)
here are 4 values
但这失败了..
In [206]: print '%s %s %s %s' % (s.split())
我不确定为什么? split()
的回归不应该
解压缩并分发到预期的参数
格式字符串?
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
C:\bla\Desktop\<ipython-input-206-600f130ff0b2> in <module>()
----> 1 print '%s %s %s %s' % (s.split())
TypeError: not enough arguments for format string
“注意足够的参数”..我在列表中确实有正确数量的项目。出于某种原因,列表是否在这种情况下不解包,而是与变量赋值有关吗?
我试图回答这个问题时遇到了这个问题 writing column entry just one below another in python
答案 0 :(得分:4)
您必须将s.split()
转换为像这样的元组
>>> s = 'here are 4 values'
>>> '%s %s %s %s' % tuple(s.split())
'here are 4 values'
用于格式化或使用.format()
代替,解压缩参数。
'{0} {1} {2} {3}'.format(*s.split())
答案 1 :(得分:4)
根本问题是%
- 格式化和解包完全没有关系。 %
要求值为元组;其他类型的序列won't work。 (虽然它会接受一个非元组值。)
这有一个令人遗憾的后果,即所有元组都被解释为值的元组,无论这是否合乎需要。因此,要将元组视为值,您必须将其包含在另一个元组中:
>>> '%s' % ('a', 'b')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>> '%s' % (('a', 'b'),)
"('a', 'b')"
无论如何,最好使用format
。
答案 2 :(得分:3)
我认为问题是%不允许参数解包。这是一种有效的方法:
>>> s = 'Here are some values'
>>> '{} {} {} {}'.format(*s.split())
'Here are some values'
@senderle指出这种语法仅适用于python 2.7及更高版本,这里的代码适用于以前的版本:
>>> s = 'Here are some values'
>>> '{0} {1} {2} {3}'.format(*s.split())
'Here are some values'
答案 3 :(得分:1)
>>> s = 'here are 4 values'
>>> print '%s %s %s %s' % tuple(s.split())
here are 4 values
>>> print '%s' % s.split()
['here', 'are', '4', 'values']
Python正在尝试将列表转换为字符串,因此它只需要1个参数