第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Python如何優(yōu)雅的交錯(cuò)合并兩個(gè)列表

Python如何優(yōu)雅的交錯(cuò)合并兩個(gè)列表

蕪湖不蕪 2019-02-25 05:09:33
比如a = [1, 2, 3], b = [4, 5, 6] 合并為[1, 4, 2, 5, 3, 6] 你覺(jué)得怎么寫(xiě)比較優(yōu)雅?
查看完整描述

11 回答

?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

pythonfrom itertools import chain
list(chain.from_iterable(zip(a, b)))

# py2
list(chain(*zip(a, b)))
查看完整回答
反對(duì) 回復(fù) 2019-03-01
?
富國(guó)滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

修正: 之前的代碼有問(wèn)題, 更新一次..

不知道算不算優(yōu)雅, 但應(yīng)該省內(nèi)存:

def xmerge(a, b):
    alen, blen = len(a), len(b)
    mlen = min(alen, blen)
    for i in xrange(mlen):
        yield a[i]
        yield b[i]

    if alen > blen:
        for i in xrange(mlen, alen):
            yield a[i]
    else:
        for i in xrange(mlen, blen):
            yield b[i]

a = [1, 2, 3]
b = [5, 6, 7, 8, 9, 10]

c = [i for i in xmerge(a, b)]
print c

c = [i for i in xmerge(b, a)]
print c
查看完整回答
反對(duì) 回復(fù) 2019-03-01
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊

原來(lái)stackoverflow已經(jīng)討論過(guò),寫(xiě)法都很吊哦。我個(gè)人很喜歡這個(gè):
調(diào)用的cycle/islice函數(shù)都來(lái)自itertools

def roundrobin(*iterables):
    "roundrobin('ABC', 'D', 'EF') --> A D E B F C"
    # Recipe credited to George Sakkis
    pending = len(iterables)
    nexts = cycle(iter(it).next for it in iterables)
    while pending:
        try:
            for next in nexts:
                yield next()
        except StopIteration:
            pending -= 1
            nexts = cycle(islice(nexts, pending))
查看完整回答
反對(duì) 回復(fù) 2019-03-01
?
滄海一幻覺(jué)

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊

pythondef xmerge(a, b):
  tmp = (list(a), list(b));
  return [tmp[i%2].pop(0) if tmp[i%2] else tmp[1-i%2].pop(0) for i in xrange(0, len(a) + len(b))]


print xmerge([1,2,3], [5,6,7,8,9])
print xmerge([1,2,3,4,5], [7,8,9])

這樣?

//寫(xiě)到一半搜了下python的三元表達(dá)式想起以前也是這種神獸飛過(guò)的心情用python的……
//不過(guò)還有三元寫(xiě)成if a then b else c的語(yǔ)言,現(xiàn)在還是能理解了……

查看完整回答
反對(duì) 回復(fù) 2019-03-01
?
陪伴而非守候

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊

python3.3
result = [list(zip(a, b))[i][j] for i in range(len(a)) for j in range(len(list(zip(a, b))[0]))]

雖然是一行,但是有點(diǎn)牽強(qiáng),小括號(hào)太多
查看完整回答
反對(duì) 回復(fù) 2019-03-01
?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

優(yōu)雅的做數(shù)據(jù)處理,scipy系列庫(kù)還是需要的。
有現(xiàn)成matplotlib中的flatten函數(shù)可以用。

from matplotlib.cbook import flatten
a = [1, 2, 3]
b = [4, 5, 6]
list(flatten(zip(a,b)))
查看完整回答
反對(duì) 回復(fù) 2019-03-01
?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊

a.extend(b)
查看完整回答
反對(duì) 回復(fù) 2019-03-01
?
拉丁的傳說(shuō)

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊

a = [1, 2, 3]
b = [4, 5, 6]

一般的方法

def slove(a, b):
c = []
i = 0
j = 0
while i<len(a) and j<len(b):
c.append(a[i])
c.append(b[j])
i += 1
j += 1
while i < len(a):
c.append(a[i])
i += 1
while j < len(b):
c.append(b[j])
j += 1

print(c)

if name == 'main':
slove(a, b)

查看完整回答
反對(duì) 回復(fù) 2019-03-01
?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊

a=[1,2,3]
b=[4,5,6]
a=set(a)
b=set(b)
c=list(a|b)

如果只是列表的merge,是不是可以轉(zhuǎn)成set(),再做交集操作
set作list merge時(shí)比list快。
@lohocla4dam 幫忙指出了不足

查看完整回答
反對(duì) 回復(fù) 2019-03-01
  • 11 回答
  • 0 關(guān)注
  • 2237 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)