编辑:我已经意识到我的错误(如果声明,变量x被分配给字符串中的元素,而我正在与列表的长度进行比较)。试图明天早上解决这个问题。对于这个愚蠢的错误的应用,但我会感激任何学习。
我正在尝试将两个列表合并为一个列表。
m = [1,2,3]
n = [4,5,6]
v = m+n
def myFun():
return [(str(x)+str(y)) for x in m if x < len(m) for y in n if y < len(n)]
print(myFun())
myFun()的结果应显示“14,25,36”
我还尝试将代码细分为一个更加pythonic的世界,并看到我误入歧途的地方:
def my(fun()):
for x in m if x < len(m):
for y in n if y < len(n): # problem here, running until count 9 instead of 3
# like it's supposed to.. author error..
newlist.append(str(x)+str(y))
print(newlist)
我是否朝着正确的方向前进,或者我是否应该尝试构建地图,我已经看过几页说如果你必须使用list-comp或lambda反转地图可能会适得其反?此外,是否可以计算列表理解/ lambda中的特定对象? (例如列表长度)?
答案 0 :(得分:5)
使用zip()
:
In [8]: m = [1,2,3]
In [9]: n = [4,5,6]
In [10]: [str(x)+str(y) for x,y in zip(m,n)]
Out[10]: ['14', '25', '36']
如果列表长度不同,请使用itertools.izip_longest()
:
In [2]: m=[1,2,3]
In [3]: n=[4,5,6,7]
In [4]: from itertools import izip_longest
In [5]: [str(x)+str(y) for x,y in izip_longest(m,n,fillvalue="")]
Out[5]: ['14', '25', '36', '7']
答案 1 :(得分:3)
使用地图:
map(lambda a, b: str(a) + str(b), m, n)