str.format(list) with negative index doesn't work in Python
formatting, python, string
Solution
It's what I would call a design glitch in the format string specs. Per the docs,
element_index ::= integer | index_string
but, alas, `-1` is not "an integer" -- it's an expression. The unary-minus operator doesn't even have particularly high priority, so that for example `print(-2**2)` emits `-4` -- another common issue and arguably a design glitch (the `**` operator has higher priority, so the raise-to-power happens first, then the change-sign requested by the lower priority unary `-`).
Anything in that position in the format string that's not an integer (but, for example, an expression) is treated as a string, to index a dict argument -- for example:
$ python3 -c "print('The last:{0[2+2]}'.format({'2+2': 23}))"
The last:23
Not sure whether this is worth raising an issue in the Python trac, but it's certainly a somewhat surprising behavior:-(.
Problem
I use a negative index in replacement fields to output a formatted list,but it raises a TypeError.The codes are as follows: ``` >>> a=[1,2,3] >>> a[2] 3 >>> a[-1] 3 >>> 'The last:{0[2]}'.format(a) 'The last:3' >>> 'The last:{0[-1]}'.format(a) Traceback (most recent call last): File "", line 1, in TypeError: list indices must be integers, not str ```