我想创建一个列表,在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,等等...]
答案 0 :(得分:2)
最短的解决方案可能是:
list(sum(zip(t2, t1), ()))
答案 1 :(得分:2)
在Python中,您不需要&#34;保留容量&#34;列表。只需写下
t3 = []
事实上,t3 = [len(t1)+len(t2)]
甚至不会创建长度为24的列表,但会创建一个包含单个条目的列表[24]。
t1[a]
和t2[a]
是您要添加到列表中的元素。要添加元素,请使用.append
方法:
t3.append(t1[a])
t3.append(t2[a])
.extend
用于将列表(实际上是任何可迭代的)添加到列表中,例如
t3.extend([t1[a], t2[a]])
使用list comprehensions可以轻松解决问题本身。
[a for l in zip(t2, t1) for a in l]
可以进行许多其他改进(例如,使用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