冬雪雪冬 发表于 2017-8-21 16:42:48

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 17:47:47

本帖最后由 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']))

冬雪雪冬 发表于 2017-8-21 17:57:58

jerryxjr1220 发表于 2017-8-21 17:47
写得有点累赘了



我在repl.it上验证发现如果数据有0则被忽略掉了,应该是08行的判断的问题。

jerryxjr1220 发表于 2017-8-21 18:02:02

冬雪雪冬 发表于 2017-8-21 17:57
我在repl.it上验证发现如果数据有0则被忽略掉了,应该是08行的判断的问题。

是的,因为numpy的列表合并必须是维度相同的,所以我按最大维度先建立了全零的空列表,合并后再挑出不是0的项按列表推导式返回。

可能这题用numpy不是最合适,所以仅供参考。

九九八十一 发表于 2017-8-21 22:34:57

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

不会用转置函数

mintaka 发表于 2017-8-22 15:25:12

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

solomonxian 发表于 2017-8-22 19:12:15

感觉像是等长部分交错,然后接上后面超长部分?
merge = lambda a,b:*len(b),b+[""]*len(a)) for i in j if i]

solomonxian 发表于 2017-8-22 19:20:36

楼主,答案有笔误
NameError: name 'b' is not defined
那个应该是 list2 吧{:10_257:}

冬雪雪冬 发表于 2017-8-22 19:23:53

solomonxian 发表于 2017-8-22 19:12
感觉像是等长部分交错,然后接上后面超长部分?

是的,就是这个意思。

冬雪雪冬 发表于 2017-8-22 19:25:17

solomonxian 发表于 2017-8-22 19:20
楼主,答案有笔误

那个应该是 list2 吧

感谢指出,当初设计题目时用的是a和b,后来为了更清晰些就改为list1和list2了,这处忘了改了。

第四时空 发表于 2017-8-22 19:48:09

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

chunchun2017 发表于 2017-8-23 12:35:16

天天都在等每日一题,但是为什么82,83都没在今日热门和最新发布中看到呢?这个还是偶然看到了,居然是前天的帖子,还以为前几天没有发新题了呢,82在哪里,现在还没有找到,82,83现在答案还有奖励么?

chunchun2017 发表于 2017-8-23 15:09:21

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

冬雪雪冬 发表于 2017-8-23 15:52:33

chunchun2017 发表于 2017-8-23 12:35
天天都在等每日一题,但是为什么82,83都没在今日热门和最新发布中看到呢?这个还是偶然看到了,居然是前天 ...

当然有奖励了。在这里可以看到所有的题目。
http://bbs.fishc.com/forum.php?mod=collection&action=view&ctid=588

chunchun2017 发表于 2017-8-23 15:59:51

冬雪雪冬 发表于 2017-8-23 15:52
当然有奖励了。在这里可以看到所有的题目。
http://bbs.fishc.com/forum.php?mod=collection&action=vie ...

谢谢,麻麻再也不用担心我找不到题目了,哈哈

wukangwi 发表于 2017-10-8 19:45:50

hao

shigure_takimi 发表于 2017-12-4 14:42:23

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']
##    >>>

lebroncm 发表于 2017-12-8 20:05:57

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

yjsx86 发表于 2018-1-28 23:38:35

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

painx 发表于 2018-1-29 00:05:45

楼主辛苦了。。。。。。。。。。。。
页: [1] 2
查看完整版本: Python:每日一题83(答题领鱼币)