【问题标题】:Edit an element in a list - python [closed]编辑列表中的元素-python [关闭]
【发布时间】:2015-03-05 17:00:45
【问题描述】:

我编写了一个程序,它从 Excel 电子表格中获取行并将它们作为列表返回。我不想编辑创建的每个列表:

...来自

['-1', '3', '4', '5', '3', '7', '2', '4', '0', '8', '12', '23', '4', '0']

到...

['-1', '1:3', '2:4', '3:5', '4:3', '5:7', '6:2', '7:4', '8:0', '9:8', '10:12', '11:23', '12:4', '13:0'] 
import csv

with open('testingSeta.csv') as csvfile:
    reader = csv.reader(csvfile)

    line = True

    for row in reader:
        if line:
            line = False
            continue

        x = row.pop()
        row.insert(0,x)        

        print(row)

【问题讨论】:

  • 不知道你的问题是什么
  • 你不能用list.map()吗?
  • 请解释你的逻辑。这两个列表之间的关系应该是什么?
  • 它从 excel 电子表格中的行中获取值并将其放入 python 中的列表中。例如,第一个列表来自 excel 中的第 1 行。第二个列表代表第一个列表的编辑版本。我试图将 1:x、2:y... 等添加到列表中的值而不丢失那里的值

标签: python list csv for-loop


【解决方案1】:

尝试使用列表理解:

src =  ['-1', '3', '4', '5', '3', '7', '2', '4', '0', '8', '12', '23', '4', '0']


src[0:1] + [ str(i+1) + ":" + v for i,v in enumerate(src[1:])]

结果:

['-1',
'1:3',
'2:4',
'3:5',
'4:3',
'5:7',
'6:2',
'7:4',
'8:0',
'9:8',
'10:12',
'11:23',
'12:4',
'13:0']

您还可以使用函数式方法:

map(lambda (i,v): v if i == 0 else str(i)+":"+v, enumerate(src))

我确实更喜欢函数式方式,但据我所知,列表理解似乎更“pythonic”。

【讨论】:

  • 使用f(src)调用:f=lambda l:map(lambda (i,v): ('' if i==0 else str(i)+":")+v, enumerate(l))
【解决方案2】:
>>> a = ['-1', '3', '4', '5', '3', '7', '2', '4', '0', '8', '12', '23', '4', '0']
>>> a[:1] + ["{}:{}".format(x,y) for x,y in enumerate(a[1:], start=1)]
['-1', '1:3', '2:4', '3:5', '4:3', '5:7', '6:2', '7:4', '8:0', '9:8', '10:12', '11:23', '12:4', '13:0']

Enumerate 让您以元组的形式访问索引和元素

使用itertools.starmap

>>> import itertools
>>> a[:1] + list(itertools.starmap("{}:{}".format, enumerate(a[1:], start=1)))
['-1', '1:3', '2:4', '3:5', '4:3', '5:7', '6:2', '7:4', '8:0', '9:8', '10:12', '11:23', '12:4', '13:0']

使用maplambda

>>> a[:1] + map(lambda x:"{}:{}".format(x[0],x[1]), enumerate(a[1:], start=1))
['-1', '1:3', '2:4', '3:5', '4:3', '5:7', '6:2', '7:4', '8:0', '9:8', '10:12', '11:23', '12:4', '13:0']

如果你想存储它:

>>> a = a[:1] + ["{}:{}".format(x,y) for x,y in enumerate(a[1:], start=1)]
>>> print(a)
['-1', '1:3', '2:4', '3:5', '4:3', '5:7', '6:2', '7:4', '8:0', '9:8', '10:12', '11:23', '12:4', '13:0']

【讨论】:

  • 可以从1开始索引,去掉x+1 a[:1] + ["{}:{}".format(x,y) for x,y in enumerate(a[1:],1)]
  • 是的,当然@PadraicCunningham
  • 似乎不起作用。然后当我打印 (a) 时,它只打印原始列表。
  • 检查更新最后一个,@goosingout
  • 谢谢你的作品就像一个魅力
【解决方案3】:
from_list = ['-1', '3', '4', '5', '3', '7', '2', '4', '0', '8', '12', '23', '4', '0']

for i in range(1, len(from_list)):

    new_ele = str(i)+':'+from_list[i]
    from_list[i] = new_ele
print from_list

输出将是:

['-1', '1:3', '2:4', '3:5', '4:3', '5:7', '6:2', '7:4', '8:0', '9:8', '10:12', '11:23', '12:4', '13:0']

【讨论】:

  • 谢谢你也成功了
猜你喜欢
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 2020-08-13
相关资源
最近更新 更多