Python:每日一题83(答题领鱼币)
本帖最后由 冬雪雪冬 于 2017-8-22 19:23 编辑题目:
昨天的题目好像有点偏难,大家答题不踊跃,这回来个简单点的。
有两个一维列表,现在要把两个列表合并成一个列表,要求先排第一个列表的第0个元素,再排第二个列表的第0个元素,然后第一个列表的第1个元素,再排第二个列表的第1个元素,以此类推。
如果两个列表的长度不一,则最后再把长的列表的剩余元素直接排在后面,如:
['A0', 'A1', 'A2', 'A3', 'A4', 'A5']
['B0', 'B1', 'B2', 'B3', 'B4', 'B5']
排成
['A0', 'B0', 'A1', 'B1', 'A2', 'B2', 'A3', 'B3', 'A4', 'B4', 'A5', 'B5']
['A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7']
['B0', 'B1', 'B2', 'B3']
排成
['A0', 'B0', 'A1', 'B1', 'A2', 'B2', 'A3', 'B3', 'A4', 'A5', 'A6', 'A7']
['A0', 'A1', 'A2']
['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6']
排成
['A0', 'B0', 'A1', 'B1', 'A2', 'B2', 'B3', 'B4', 'B5', 'B6']
写成merge函数,要求参数为2个列表,返回值为一个合并的列表。
**** Hidden Message *****
本帖最后由 jerryxjr1220 于 2017-8-21 18:05 编辑
写得有点累赘了,而且仅对数字有效,字符的话就会出错,仅供参考。
import numpy as np
def merge(list1, list2):
maxlen = max(len(list1),len(list2))
list3 = np.zeros((maxlen,1), dtype='int32')
list4 = np.zeros((maxlen,1), dtype='int32')
list3[:len(list1),0] = list1[:]
list4[:len(list2),0] = list2[:]
return if i !=0]
print(merge(,))
字符的话,要改成
import numpy as np
def merge(list1, list2):
maxlen = max(len(list1),len(list2))
list3 = np.zeros((maxlen,1), dtype='str')
list4 = np.zeros((maxlen,1), dtype='str')
list3[:len(list1),0] = list1[:]
list4[:len(list2),0] = list2[:]
return if i]
print(merge(['a','b','c','d'],['e','f','g'])) jerryxjr1220 发表于 2017-8-21 17:47
写得有点累赘了
我在repl.it上验证发现如果数据有0则被忽略掉了,应该是08行的判断的问题。 冬雪雪冬 发表于 2017-8-21 17:57
我在repl.it上验证发现如果数据有0则被忽略掉了,应该是08行的判断的问题。
是的,因为numpy的列表合并必须是维度相同的,所以我按最大维度先建立了全零的空列表,合并后再挑出不是0的项按列表推导式返回。
可能这题用numpy不是最合适,所以仅供参考。 def merge(list1,list2):
list3 = []
a = min(len(list1),len(list2))
for i in range(a):
list3.extend(,list2])
list3.extend(list1) if len(list1)>len(list2) else list3.extend(list2)
return list3
不会用转置函数 def merge(list1,list2):
list=[]
maxlist=(len(list1)>=len(list2))and list1 or list2
losslist=(len(list1)<=len(list2))and list1 or list2
for i in range(0,len(losslist)):
list.append(list1)
list.append(list2)
for i in range(len(losslist),len(maxlist)):
list.append(maxlist)
return list
print merge(,) 感觉像是等长部分交错,然后接上后面超长部分?
merge = lambda a,b:*len(b),b+[""]*len(a)) for i in j if i] 楼主,答案有笔误
NameError: name 'b' is not defined
那个应该是 list2 吧{:10_257:} solomonxian 发表于 2017-8-22 19:12
感觉像是等长部分交错,然后接上后面超长部分?
是的,就是这个意思。 solomonxian 发表于 2017-8-22 19:20
楼主,答案有笔误
那个应该是 list2 吧
感谢指出,当初设计题目时用的是a和b,后来为了更清晰些就改为list1和list2了,这处忘了改了。 import copy
def merge(list1, list2):
result_list = copy.deepcopy(list1)
num = 1
for x in list2:
result_list.insert(num, x)
num += 2
return result_list
list1 = ['A0', 'A1', 'A2']
list2 = ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6']
print(merge(list1, list2))
天天都在等每日一题,但是为什么82,83都没在今日热门和最新发布中看到呢?这个还是偶然看到了,居然是前天的帖子,还以为前几天没有发新题了呢,82在哪里,现在还没有找到,82,83现在答案还有奖励么?
def merge_list(list0,list1):
list3 = []
i = 0
len0 = len(list0) if len(list0)<=len(list1) else len(list1)
while(i<len0):
list3.append(list0)
list3.append(list1)
i+=1
list3.extend(list0)
list3.extend(list1)
return list3 chunchun2017 发表于 2017-8-23 12:35
天天都在等每日一题,但是为什么82,83都没在今日热门和最新发布中看到呢?这个还是偶然看到了,居然是前天 ...
当然有奖励了。在这里可以看到所有的题目。
http://bbs.fishc.com/forum.php?mod=collection&action=view&ctid=588 冬雪雪冬 发表于 2017-8-23 15:52
当然有奖励了。在这里可以看到所有的题目。
http://bbs.fishc.com/forum.php?mod=collection&action=vie ...
谢谢,麻麻再也不用担心我找不到题目了,哈哈 hao def joinList(listA, listB):
lengthA = len(listA)
lengthB = len(listB)
resultList = []
if lengthA <= lengthB:
for i in range(lengthA):
resultList.append(listA)
resultList.append(listB)
resultList += listB
else:
for i in range(lengthB):
resultList.append(listA)
resultList.append(listB)
resultList += listA
return resultList
a = ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']
b = ['B0', 'B1', 'B2', 'B3', 'B4', 'B5']
print(joinList(a,b))
a = ['A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7']
b = ['B0', 'B1', 'B2', 'B3']
print(joinList(a,b))
a = ['A0', 'A1', 'A2']
b = ['B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6']
print(joinList(a,b))
##
## >>>
## ['A0', 'B0', 'A1', 'B1', 'A2', 'B2', 'A3', 'B3', 'A4', 'B4', 'A5', 'B5']
## ['A0', 'B0', 'A1', 'B1', 'A2', 'B2', 'A3', 'B3', 'A4', 'A5', 'A6', 'A7']
## ['A0', 'B0', 'A1', 'B1', 'A2', 'B2', 'B3', 'B4', 'B5', 'B6']
## >>>
def merge(list1,list2):
list3=[]
if len(list1)==len(list2):
for a in range(0,len(list1)):
list3.extend(,list2])
if len(list1)<len(list2):
for b in range(0,len(list1)):
list3.extend(,list2])
for c in range(len(list2)-len(list1)-1,len(list2)):
list3.append(list2)
if len(list1)>len(list2):
for e in range(0,len(list2)):
list3.extend(,list2])
for f in range(len(list1)-len(list2)-1,len(list1)):
list3.append(list1)
return list3
import itertools as it
a = ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']
b = ['B0', 'B1', 'B2', 'B3', 'B4', 'B5']
print()
#结果
['A0', 'B0', 'A1', 'B1', 'A2', 'B2', 'A3', 'B3', 'A4', 'B4', 'A5', 'B5'] 楼主辛苦了。。。。。。。。。。。。
页:
[1]
2