如何在列表中的每个元素前添加新值?

时间:2016-01-17 23:28:28

标签: python list

我有一个关于向列表中的现有元素添加新值的问题。例如,如果我有

myList = ["0","12","221","3344"]

我设置了一个条件,如果列表中每个元素的长度小于4,程序将在每个元素的前面添加值“0”。也许它应该看起来像这样

newList = ["0000","0012","0221","3344"]

现在我已经完成了一些示例代码,如下面的

x = ["0","1"]
    if len(x) < 4:
        x.insert(0,"0")
print(x)

输出就像这样

["0","0","1"]

我尝试添加/更改某些行,如下所示

x = ["0","1"]
  for i in x:
    if len(i) < 4:
        i.insert(0,"0")
print(x)

但我得错误说

'str' object has no attribute 'insert'.

我在这里错过了什么或有其他办法吗? 谢谢你的回答。

4 个答案:

答案 0 :(得分:6)

对于在字符串开头添加0的特殊情况,您可以使用zfill

>>> myList = ["0","12","221","3344"]
>>> [x.zfill(4) for x in myList]
['0000', '0012', '0221', '3344']

答案 1 :(得分:3)

您可以使用内置map函数将lambda函数应用于列表中的每个项目,如下所示:

myList = ['0', '12', '221', '3344']
answer = map(lambda x: '0'*(4-len(x))+x if len(x) < 4 else x, myList)
print(answer)

<强>输出

['0000', '0012', '0221', '3344']

答案 2 :(得分:3)

列表理解:

>>> myList = ["0","12","221","3344","11111111111"]
>>> ['0'*(4 - len(x)) + x for x in myList]
['0000', '0012', '0221', '3344', '11111111111']

请注意,如果y小于零,则'0'*y为空字符串,我将最后一个值添加到myList以显示此信息。这就是为什么你在理解中不需要if / else。

编辑:str.rjust是另一种选择:

>>> [x.rjust(4, '0') for x in myList]
['0000', '0012', '0221', '3344', '11111111111']

答案 3 :(得分:1)

这是一个解决方案:

<MKIconToggle checked={checked}
              onCheckedChange={change => changeState(change.checked)}>
    <Image source='img1'/>
    <Image state_checked={true} source='img2'/>
</MKIconToggle>;