python将元素附加到列表

时间:2016-05-20 11:45:49

标签: python list while-loop append extend

我想创建一个列表,在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

所以基本上我想要[&#39; Jan&#39; 31,&#39; 2月&#39; 28,&#39; Mar&#39; 31,等等...]

8 个答案:

答案 0 :(得分:2)

最短的解决方案可能是:

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

答案 1 :(得分:2)

  1. 在Python中,您不需要&#34;保留容量&#34;列表。只需写下

    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]
    
  4. 可以进行许多其他改进(例如,使用for循环而不是while循环)。你可以把它带到http://codereview.stackexchange.com

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

答案 2 :(得分:1)

只需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]

答案 3 :(得分:1)

你走了:

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)

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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))

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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