【问题标题】:python appending elements to a list from a listpython从列表中将元素附加到列表中
【发布时间】:2016-09-17 16:08:54
【问题描述】:

我想创建一个列表,从 python 中的 2 个单独列表中交替添加元素。 我有以下想法,但它似乎不起作用:

t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
t2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
t3= [len(t1)+len(t2)]
a = 0

while a < len(t1)+len(t2):
    t3.extend(t1[a])
    t3.extend(t2[a])
    a = a + 1
print t3

所以基本上我想要 ['Jan',31,'Feb',28,'Mar',31, ect...]

【问题讨论】:

    标签: python list while-loop append extend


    【解决方案1】:

    Python 是动态编程语言,标识符的类型是在赋值时确定的。 所以基本上你可以这样做:

    t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    t2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
    'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
    t3= []
    for a in range(len(t1)):
        append.append(t1[a])
        apppend.append(t2[a])
    print t3
    

    【讨论】:

      【解决方案2】:
      1. 在 Python 中,您不需要为列表“预留容量”。随便写

        t3 = []
        

        事实上,t3 = [len(t1)+len(t2)] 甚至没有创建长度为 24 的列表,而是创建了一个包含单个条目 [24] 的列表。

      2. t1[a]t2[a] 是您要添加到列表中的元素。要添加元素,请使用.append 方法:

        t3.append(t1[a])
        t3.append(t2[a])
        

        .extend 用于将列表(实际上是任何可迭代的)添加到列表中,例如

        t3.extend([t1[a], t2[a]])
        
      3. 使用list comprehensions可以轻松解决问题本身。

        [a for l in zip(t2, t1) for a in l]
        

      还可以进行许多其他改进(例如,使用 for 循环而不是 while 循环)。你可以把它带到http://codereview.stackexchange.com


      (顺便说一句,此代码不处理闰年。)

      【讨论】:

        【解决方案3】:

        最短的解决方案可能是:

        list(sum(zip(t2, t1), ()))
        

        【讨论】:

        【解决方案4】:

        给你:

        t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        t2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
              'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
        t3 = list()
        
        for i, j in zip(t1, t2):
          t3.append(i)
          t3.append(j)
        
        print(t3)
        

        【讨论】:

          【解决方案5】:

          只需zip 列表并将结果展平。

          >>> from itertools import chain
          >>> t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
          >>> t2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          ... 'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
          >>> list(chain(*zip(t2, t1)))
          ['Jan', 31, 'Feb', 28, 'Mar', 31, 'Apr', 30, 'May', 31, 'Jun', 30, 'Jul', 31, 'Aug', 31, 'Sept', 30, 'Oct', 31, 'Nov', 30, 'Dec', 31]
          

          没有chain

          >>> [x for tup in zip(t2, t1) for x in tup]
          ['Jan', 31, 'Feb', 28, 'Mar', 31, 'Apr', 30, 'May', 31, 'Jun', 30, 'Jul', 31, 'Aug', 31, 'Sept', 30, 'Oct', 31, 'Nov', 30, 'Dec', 31]
          

          【讨论】:

            【解决方案6】:

            在 Python 中,您不能像在其他语言中创建数组那样创建固定长度的列表,因此第三行应该只是 t3 = []

            另外,extend() 函数用于连接列表。要添加单个新值,您需要改用append() 函数。

            【讨论】:

              【解决方案7】:
              t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
              t2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                    'Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
              
              arr = []
              
              for i in range(12):
                  arr.append(t2[i])
                  arr.append(t1[i])
              
              print(arr)
              

              输出 -

              ['Jan', 31, 'Feb', 28, 'Mar', 31, 'Apr', 30, 'May', 31, 'Jun', 30, 'Jul', 31, 'Aug', 31, 'Sept', 30, 'Oct', 31, 'Nov', 30, 'Dec', 31]
              

              你也可以写-

              import itertools
              
              arr = list(itertools.chain.from_iterable(zip(t2, t1))
              

              【讨论】:

                【解决方案8】:

                您可能需要阅读更多关于 python 列表及其方法的信息。 t3= [len(t1)+len(t2)] 这根本没有必要。我猜你有 C 背景并试图用大小初始化列表。在 python 中,您不必初始化列表大小(其自动增加)。并且您在列表中的项目不会按照您输入的 sequence 存储。如果您希望您的项目处于相同的顺序,请在 python 中检查tuple。 快乐编码

                【讨论】:

                • 是的,我今天开始学习 python。感谢您的帮助!
                猜你喜欢
                • 2017-12-18
                • 1970-01-01
                • 1970-01-01
                • 2023-03-09
                • 2020-10-29
                • 2020-09-02
                • 2015-02-05
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多