我想通过lambda函数执行任务,但不确定是否可行。
假设我有以下列表:
list = [3,2,33,45,566,21]
列表的最长长度为566,所以len(566) = 3
。
然后我要将该元素的所有元素扩展为最后一位。
例如,3将是333,而45将是455。
Listchange = [333,222,333,455,566,211]
是否可以使用lambda函数实现此目标?
我想我必须在一行中使用lambda和for以及一个函数。
另一个例子:
list = [1,21,3,4,5344]
列表的最大长度为4,因此将所有列表的最后一位扩展为长度4。
list = [1111,2111,3333,5344]
我的试用版,但是第一次使用lambda:
print(list(map(lambda i: for i in range(maxnum)-len(i): i+=i ,x)))
答案 0 :(得分:1)
您可以将str.ljust
参数设置为数字的最后一位来使用fillchar
方法:
lst = [1, 21, 3, 4, 5344]
list(map(lambda i: int(str(i).ljust(4, str(i % 10))), lst))
这将返回:
[1111, 2111, 3333, 4444, 5344]
答案 1 :(得分:0)
@blhsing已经提供了正确的答案。但是,如果有人在寻找列表理解解决方案,则为:
my_list = [1,21,3,4,5344]
max_length = 4
new_list = [int(x + x[-1]*(max_length-len(x))) for x in map(str, L)]
它返回:
[1111, 2111, 3333, 4444, 5344]
答案 2 :(得分:0)
这是基于 blhsing 的解决方案的另一种方法,可以在任意长度下工作:
inList = [3,2,33,45,566,21]
inList = list(map(lambda elem: int(str(elem).ljust(len(str(max(inList))),str(elem)[-1])), inList))
print(inList)
输出:
[333, 222, 333, 455, 566, 211]
答案 3 :(得分:0)
您可以结合使用f字符串和方法format()
:
lst = [3, 2, 33, 45, 566, 21]
max_length = max(map(len, map(str, lst)))
list(map(lambda x: int(f'{{:{str(x)[-1]}<{max_length}}}'.format(x)), lst))
# [333, 222, 333, 455, 566, 211]