2011-04-26 94 views
1

如果L = [['abc 1234',2], ['foo 1',2] , ['bar 12312434',2]]切片为““在python空间

将如何切L到让一切都交给第一空间

['abc,'foo','bar'] 
+1

我喜欢这些Python速度编码。他们清楚地显示了在Python中编程的快速实践。 ';)' – ulidtko 2011-04-26 18:33:29

+0

当然,如果它总是三个第一个字符,你可以在[L]中使用'[i [0] [0:3]'。 – Benjamin 2011-04-26 19:00:02

回答

5
In [1]: L = [['abc 1234',2], ['foo 1',2] , ['bar 12312434',2]] 

In [2]: [x[0].split(' ')[0] for x in L] 
Out[2]: ['abc', 'foo', 'bar'] 
2
L = [['abc 1234',2], ['foo 1',2] , ['bar 12312434',2]] 
print [x[0].split()[0] for x in L] 
1
for i in range(len(L)): 
    s = L[i][0] 
    s = s.split(' ')[0] 
    L[i] = s 
+2

Ewwww。学习列表理解,老兄! – ulidtko 2011-04-26 18:37:56

+3

@ulidtko嗯,我给出了一个答案,我会采取的方式去做,并不意味着它必须被接受或upvoted – keepitreall89 2011-04-26 18:39:37

0

在情况下,您目前,空间总是出现在同一个位置。如果你知道这将是的话,你可以这样做:

L = [['abc 1234',2], ['foo 1',2] , ['bar 12312434',2]] 
L2 = [x[0][0:3] for x in L] 
print L2 

输出:

[ 'ABC', '富', '酒吧']

中当然,如果空间可能出现在不同的位置,那么使用str.split()的解决方案之一会更好。

0

我发现列表理解有时更难看了,我希望保持独立的循环和提取:

def extract(element): 
    """Extracts the string until the first space of the first element of a list 
    >>> extract(['abc 1234',2]) 
    'abc' 
    """ 
    return element[0].split()[0] 

,这样就可以做单一元素的一些测试:

extract(L[2]) 
'bar' 

,然后用一个列表理解或使用地图应用此[适用功能到列表中的每个元素]:

map(extract,L) 
['abc', 'foo', 'bar']