2013-02-14 25 views
1

我有這個數組:如何根據依賴值獲取最大項目?

array = ["a\nb", "c", "d"] 

我想找出數組的元素有很多線和多少。我想在python這個Ruby代碼:

array.map {|e| e.split("\n").size }.max #=> 2 

這工作,但我想知道是否有一個更好的辦法:

bigger = 0 
for e in array: 
    e_lines = len(e.split('\n')) 
    if e_lines > bigger: 
     bigger = e_lines 
+0

不確定Python,但Ruby可能是:array.map {| e | e.to_a.size} .max' – DigitalRoss 2013-02-14 20:27:07

+1

如果您只對Y語言感興趣,請不要包含語言X的標籤。 – 2013-02-14 20:35:14

+1

另外,請注意措辭:Ruby代碼片段doest * not *「find出哪個數組的元素有更多的行「。 – 2013-02-14 20:37:33

回答

4
In [54]: array = ["a\nb", "c", "d"] 
In [56]: max(e.count("\n") for e in array)+1 
Out[56]: 2 

如果你也想用的最大行數(可能非唯一)元素:

In [60]: max((e.count("\n")+1, e) for e in array) 
Out[60]: (2, 'a\nb') 
+0

「我想知道哪個數組的元素有更多的行和多少個」。這只是「多少」 – JBernardo 2013-02-14 20:29:28

+0

請注意,這可以使用[生成器表達式](http://www.youtube.com/watch?v=pShL9DCSIUw)。 – 2013-02-14 20:29:40

+1

@JBernardo OP還給出了一個Ruby的例子,它完全實現了這個功能。 – 2013-02-14 20:30:38

4

你可以這樣做:

max(array, key=lambda x: x.count('\n')) 

然後就是得到結果對象的.count('\n') + 1也知道有多少

+0

請注意,這給*帶有最多換行符的字符串*。通常這是人們想要的,但是OP的ruby代碼片段給出了該字符串中換行符的數量。 – delnan 2013-02-14 20:30:30

+0

謝謝,但@unutbu代碼對我更好。 – BernardoFire 2013-02-14 20:36:50

2

如果你想確切功能,這將是這樣的:

>>> array = ["a\nb", "c", "d"] 
>>> [len(l.split('\n')) for l in array] 
[2, 1, 1] 
>>> max(len(l.split('\n')) for l in array) 
2 

unutbu's解決方案可能會更快。

相關問題