2017-01-05 78 views
-6

的列表返回最長項,如果我有這樣的數據:Python 3中:在表

a = [['a', 'b', 'b', 'v', 'd'], 
    ['d', 'f', 'g'], ['q', 'w', 'e', 'r', 't', 'y'], 
    ['x', '123', 'v', 'b'], ['g', 'h', 'i']] 

我想運行一個函數(優選單一線),將返回123如它具有最長字符串長度列表中列出了。我怎樣才能做到這一點?

我看到的唯一的事情是找到列表中最長的列表,所以這是一個稍微不同的問題。

+0

@DeepSpace:固定,錯字 – jftuga

+3

這是一個非常類似的問題,你提到的最長的列表問題。你試過什麼了? – Moberg

回答

2

沒有任何進口,清潔:

max((word for L in a for word in L), key=len) 
5

我想我會用itertools扁平化嵌套列表,然後使用內置max

from itertools import chain 

data = [['a', 'b', 'b', 'v', 'd'], 
     ['d', 'f', 'g'], ['q', 'w', 'e', 'r', 't', 'y'], 
     ['x', '123', 'v', 'b'], ['g', 'h', 'i']] 

print(max(chain.from_iterable(data), key=len)) 
# '123' 

一種更簡單的方式是找到在每個列表中最長的字符串,然後尋找最長這些字符串之間的字符串:

print(max((max(li, key=len) for li in data), key=len)) 
# '123' 
+0

爲什麼要列出最大元素,然後索引0? – Moberg

+0

@Moberg事實上,這是我以前想法的遺留問題。 – DeepSpace

0

您可以採取幾種方法(第一種方法與@ DeepSpace的方法非常相似)。

a = [['a', 'b', 'b', 'v', 'd'], 
    ['d', 'f', 'g'], ['q', 'w', 'e', 'r', 't', 'y'], 
    ['x', '123', 'v', 'b'], ['g', 'h', 'i']] 

# flatten the list 
flattened = [x for y in a for x in y] 
longest_elem = max(flattened, key = lambda x: len(x)) 

您也可以在每個字符串的長度,使用numpy.argmax

# find the longest element using numpy.argmax 
import numpy as np 

# store the lengths of each element in `flattened` 
lengths = [len(x) for x in flattened] 

# find the index of the largest element in `lengths` 
longest_elem_index = np.argmax(lengths) 

# index `flattened` with the longest element's index from `lengths` 
longest_elem = flattened[longest_elem_index]