2016-05-06 5 views
1

Ich kann nicht verstehen, wie es funktioniert. Ich habe die Eingabe von:Python Set: "leeres" Element, falsche Eingabe

10 2 3 4 8 

Und einfachen Code

b = set(input()) 
print(b) 

Returns:

{' ', '3', '1', '2', '8', '0', '4'} 

Warum ich diese ' ' el bin immer. und wie bekommt man 10 statt '1' und '0'?

+0

'input' eine Zeichenfolge mit Leerzeichen zwischen den Zahlen zurückgibt, müssen Sie es – vaultah

+0

' Set' sieht in der Folge bei jedem Zeichen aufzuspalten. –

+0

Sie müssten ['split'] (https://docs.python.org/2/library/stdtypes.html#str.split) die Zeichenfolge, die von' input' zurückgegeben wird, in die Leerzeichen eingeben, um ein '' zu erhalten Liste der einzelnen Wörter (in diesem Fall Zahlen, aber keine ganzen Zahlen, sie sind immer noch Strings). 'input(). split()' –

Antwort

2

set() nimmt eine iterable (wie z. B. Liste, Tupel, Diktat usw.) und macht eine Reihe von ihren Elementen. Zum Beispiel:

x = [4, 5, 6] 
y = set(x) 
print(y) 
#set([4, 5, 6]) 

Ein String ist iterable auch:

for char in "yay": 
    print(char) 

#Output: 
y 
a 
y 

Daher ist ein Satz eine Zeichenfolge umwandeln kann:

x = "yay there" 
y = set(x) 
print(y) 
#set(['a', ' ', 'e', 'h', 'r', 't', 'y']) 

Wenn Sie jedes Wort möchten, verwenden Sie .split():

b = set(input().split()) 
+1

Sie wirklich wollen 'b = setzen (map (int, input(). Split())), wenn Sie die ganzen Zahlen erhalten möchten – acushner

0

Verwenden Sie filter() mit einem lambda Funktion die Raumelemente entfernen:

>>> filter(lambda x: x is not " ", [" ", "1", "2", " "]) 
>>> ['1', '2']