【问题标题】:Combining two lists of ints, into one list of strings将两个整数列表组合成一个字符串列表
【发布时间】:2012-10-27 19:24:18
【问题描述】:

编辑:我已经意识到我的错误(if 语句,变量 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”

我还尝试将代码分解成一个更 Python 的世界,并看到了我误入歧途的地方:

 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 中计算特定对象? (例如列表长度)?

【问题讨论】:

    标签: python list-comprehension


    【解决方案1】:

    使用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']
    

    【讨论】:

    • 你能解释一下 in[] / out[] 的用途吗?
    • @KyleKearney 这些来是因为我使用IPython shell,这些类似于默认python shell 的&gt;&gt;&gt;
    • @KyleKearney 很高兴这有帮助。 :)
    【解决方案2】:

    使用地图:

    map(lambda a, b: str(a) + str(b), m, n)
    

    【讨论】:

    • @AshwiniChaudhary 但公平地说,你的回答也不会是zip :) [嗯,zip 会默默地“失败”——至少map 会失败]
    • @JonClements 地图将打印类似None7 如果n =[4,5,6,7]。我认为izip_longest() 会是最好的选择。
    • 我在想:', '.join('{}{}'.format(*nums) for nums in izip_longest(m, n, fillvalue=''))
    • @Jon,具有讽刺意味的是,这似乎比 zip / map / 等更有意义。我最好回去学习! :S
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多