2011-05-07 105 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:]] 
相关问题