如何“更新”或“覆盖”Python列表

33
aList = [123, 'xyz', 'zara', 'abc']
aList.append(2014)
print aList

生产以下输出:[123,'xyz','zara','abc',2014]

应该怎么做才能覆盖/更新此列表。 我希望输出为

[2014, 'xyz', 'zara', 'abc']

6个回答

56

你可以尝试这个

alist[0] = 2014

但如果您不确定123的位置,则可以尝试这样:

for idx, item in enumerate(alist):
   if 123 in item:
       alist[idx] = 2014

2
为什么要使用 in 来比较列表项(数字等)? - d.raev
3
是不是应该写成 if 123 == item?如果有12345会怎么样? - user13372194

12

如果您知道位置,替换该项怎么样:

aList[0]=2014

如果您不知道在列表中的位置循环,请查找该项,然后替换它。

aList = [123, 'xyz', 'zara', 'abc']
    for i,item in enumerate(aList):
      if item==123:
        aList[i]=2014
        break
    
    print aList

3
为什么在找到目标项后没有使用 break 关键字? - d.raev
Edited as suggested - Kerby82

3
我认为更符合Python风格的写法是:
aList.remove(123)
aList.insert(0, 2014)

更加有用:

def shuffle(list, to_delete, to_shuffle, index):
    list.remove(to_delete)
    list.insert(index, to_shuffle)
    return

list = ['a', 'b']
shuffle(list, 'a', 'c', 0)
print list
>> ['c', 'b']

这仅适用于整数,如果我想在abc的位置插入def,则无法使用。我需要一个通用解决方案...而不是硬编码。 - pyLearner
我不知道你为什么这样想,pyLearner。请花些时间阅读Python列表的文档。 - Cairnarvon
与直接原地替换元素的解决方案(例如Kerby的解决方案)相比,这是一种相当低效的解决方案。 - wrhall

2

我正在学习编程,遇到了同样的问题。我相信像@kerby82所说的那样,更容易解决这个问题的方法是直接覆盖列表:

在Python中,可以使用以下形式将列表中的项设置为一个值:

x[n] = v

其中x是列表的名称,n是数组中的索引,v是要设置的值。

在你的例子中:

aList = [123, 'xyz', 'zara', 'abc']
aList[0] = 2014
print aList
>>[2014, 'xyz', 'zara', 'abc']

1
我希望不使用枚举而是像这样使用“range”:
for item in range(0, len(alist)):
   if 123 in alist[item]:
      alist[item] = 2014

对于新手来说,回顾一下可能更易读且更聪明。

敬礼,P.


0
如果您正在尝试从同一数组中获取一个值并尝试更新它,您可以使用以下代码。
{  'condition': { 
                     'ts': [   '5a81625ba0ff65023c729022',
                               '5a8161ada0ff65023c728f51',
                               '5a815fb4a0ff65023c728dcd']}

如果集合是userData ['condition'] ['ts'],而我们需要

    for i,supplier in enumerate(userData['condition']['ts']): 
        supplier = ObjectId(supplier)
        userData['condition']['ts'][i] = supplier

输出结果将是

{'condition': {   'ts': [   ObjectId('5a81625ba0ff65023c729022'),
                            ObjectId('5a8161ada0ff65023c728f51'),
                            ObjectId('5a815fb4a0ff65023c728dcd')]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接