我需要更正列表中的某些值。我正在使用itemgetter将值提取到一个较小的列表中。之后,我需要将更正的项目插入到较大的列表中。有没有一种方法可以反向使用itemgetter将值列表插入特定位置的较大列表中?如果不是,是否有更简洁的方式来插入不需要每次插入一行的元素?
get_data = itemgetter(*indexes)
line_as_list = line.split(",")
data = list(get_data(line_as_list))
# Change the elements in the list "data"
我目前插入项目的方式是
line_as_list[index1] = data[0]
line_as_list[index2] = data[1]
...
这会创建很多样板代码。有没有更好的办法?我希望有类似的东西
itemsetter(line_as_list, data, indexes)
itemsetter
标准库中没有,但是很容易编写:
def itemsetter(*items):
if len(items) == 1:
item = items[0]
def g(obj, value):
obj[item] = value
else:
def g(obj, *values):
for item, value in zip(items, values):
obj[item] = value
return g
例子:
lst = range(10, 20)
indexes = [1,3,5,7]
data = [81, 83, 85, 87]
setter = itemsetter(*indexes)
setter(lst, *data)
print lst # [10, 81, 12, 83, 14, 85, 16, 87, 18, 19]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句