2015-12-07 13 views
5

max yinelenen bir parametre alır ve yinelenen için maksimum değeri döndürür. Tamsayılar için bu, hangi sayının en büyük olduğunu belirleyebildiğinden bariz bir davranıştır.Max, setler listesinde ne yapar?

>>> max("hello world!") 
'w' 
>>> 'w' > 'r' 
True 
>>> max("Hello World!") 
'r' 
>>> 'W' > 'r' 
False 

Ancak Python grupları listesinden ile ne yapar: karakterler için bunun yerine Harfsel sırası kullanılır? Bunun uzunluğu ile ilgisi sadece inanıyorum olsa o setinin sipariş nasıl çalıştığını belirsiz:

>>> set([1]) < set([5]) 
False 
>>> set([1]) > set([5]) 
False 
>>> set([1]) < set([1, 2]) 
True 
>>> set(range(5)) < set(range(7)) < set(range(1000)) 
True 

Ama bu max değer üreten bu değil:

>>> max([set([1]), set([5]), set([2, 4, 7]), set([100000])]) 
set([1]) 
>>> max([set([]), set([11]), set([5]), set([2, 4, 7]), set([100000])]) 
set([11]) 
>>> max([set(range(45)), set(range(12)), set(range(100, 1260, 40))]) 
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44]) 

nasıl Python bu durumda max değerini belirliyor ? Python'da uygun alt küme işleci

+0

Tam olarak bilmiyorum ama sanırım 'sets' karma – Netwave

+4

'ile karşılaştırılıyor olabilir a' b ',' b 'bir alt kümesi olup olmadığını kontrol ediyor (bkz. [Doc] (https: // docs. python.org/2/library/sets.html)) ama 'max()' hakkında bilmiyorum. – Delgan

+0

@DanielSanchez setleri bir paylaşılmaz tiptedir (çünkü bunlar değiştirilebilir) – khelwood

cevap

6

<. Uzunluk karşılaştırılmıyor. İlk saniyenin uygun bir alt kümesidir, ancak set([11]) sonraki kümelerinin herhangi bir alt kümesi uygun olmadığı için

https://docs.python.org/2/library/stdtypes.html#set.issubset

set([]) < set([11]) True. max'un doğal uygulaması <'u kullanır, bu yüzden set([11])'u döndürmesi çok şaşırtıcı değildir.

+0

Aha, bu doğru! Setleri ayarlarsam daha belirgin hale gelir: '>>> max ([set ([]), set ([11]), set ([11, 5]), set ([2, 4, 7]), set ([5, 11, 100000])]) 'sonuç kümesinde ([100000, 11, 5])' – SuperBiasedMan

+0

* Maksimum kullanımların doğal kullanımı '<' * - aslında daha büyük işleç kullanarak biriktirir > '([kaynak] (https://hg.python.org/cpython/file/d8f48717b74e/Python/bltinmodule.c#l1427)) böylece listedeki bir sonraki öğenin bir * üst kümesi olup olmadığını test eder. geçerli maksimum. –

+0

@ajcr Muhtemelen "Olası bir uygulama" demeliydim. Python belgelerinde fiilen 'max' uygulamasının hiçbir belirtisini bulamadım, bu yüzden CPython'un '> 'seçiminin büyük ölçüde keyfi olduğunu varsayalım. –