2011-05-07 112 views

回答

7
list = ['a', 'b', 'c', 'd', 'e'] 
result = [] 
for e in list: 
    result.append(e) 
    result.append('-') 
result.pop() 

似乎工作

15
>>> list('-'.join(ls)) 
['a', '-', 'b', '-', 'c', '-', 'd', '-', 'e'] 
>>> 
+19

請注意,這僅適用於如果所有項目和分隔符是單字符字符串! – delnan 2011-05-07 11:54:20

6

這應該與任何列表元素工作:

>>> sep = '-' 
>>> ls = [1, 2, 13, 14] 
>>> sum([[i, '-'] for i in ls], [])[:-1] 
[1, '-', 2, '-', 13, '-', 14] 
+0

更好,我找到最好的:'print sum(([' - ',i] for i in ls),ls [0:1])'' – eyquem 2011-05-09 21:50:10

+1

求和列表是O(n²);這很少是一個好主意。 – Veedrac 2014-11-22 07:48:37

1

我覺得這是多了幾分優雅/ Python的,以及作爲一般。你可能會發現它的可讀性,如果你不習慣實用的風格,但:

li = ['a','b','c','d','e'] 

from operator import add 
reduce(add, [(elt, "-") for elt in li])[:-1] 

如果你願意,你可以使用拉姆達A,B:A + B,而不是operator.add。

+0

塔我有同樣的想法,但** li [0:1] **作爲開始:''在li [1:]]中減少(concat,[[' - ',x] 1])''Upvoted – eyquem 2011-05-09 21:56:21

+1

這是O(n²); O(n)解決方案很容易實現。 – Veedrac 2014-11-22 07:49:00

16

下面是我期望的速度非常快的解決方案 - 我相信所有這些操作都將以優化的c速度進行。

def intersperse(lst, item): 
    result = [item] * (len(lst) * 2 - 1) 
    result[0::2] = lst 
    return result 

測試:

>>> l = [1, 2, 3, 4, 5] 
>>> intersperse(l, '-') 
[1, '-', 2, '-', 3, '-', 4, '-', 5] 
+0

這可能是一個更清潔的方式來完成第一個任務:'result = [None,item] * len(lst)' – pabouk 2015-06-27 00:37:33

+0

@pabouk,是的,可以工作,儘管你必須在最後調用'pop'獲得多餘的「項目」的紅色)。當我有機會看看它是否更快時,我會進行測試。 – senderle 2015-06-27 03:53:28

1

適應this answer to a similar question

>>> input = ['a', 'b', 'c', 'd', 'e'] 
>>> sep = ['-'] * len(input) 
>>> list(sum(zip(input, sep),())[:-1]) 
['a', '-', 'b', '-', 'c', '-', 'd', '-', 'e'] 

Another answer to the same question執行此使用itertools和稍微修改的分隔符列表:

>>> import itertools 
>>> sep = ['-'] * (len(input) - 1) 
>>> list(it.next() for it in itertools.cycle((iter(input), iter(sep)))) 
['a', '-', 'b', '-', 'c', '-', 'd', '-', 'e'] 
1

下面將添加的每個那些在列表之間的「分隔符」元素:

seq = ['a','b','c','d','e'] 

def tween(seq, sep): 
    return reduce(lambda r,v: r+[sep,v], seq[1:], seq[:1]) 

print tween(seq, '-') 

輸出:

['a', '-', 'b', '-', 'c', '-', 'd', '-', 'e'] 

FWIW,這裏有可能感興趣的新聞組comp.lang.python組在題爲Custom string joining類似的線程您。

2
li = ['a','b','c','d','e'] 
for i in xrange(len(li)-1,0,-1): 
    li[i:i] = '-' 

from operator import concat 
seq = ['a','b','c','d','e'] 
print reduce(concat,[['-',x] for x in seq[1:]],seq[0:1]) 

li = ['a','b','c','d','e'] 
newli = li[0:1] 
[ newli.extend(('-',x)) for x in li[1:]]