Wenn ich habe

LIST=[['SPORTS','NEW YORK JETS']]

Und ich möchte das zweite Element meiner Unterliste (NEW YORK JETS) durch ___ ____ ____ ersetzen. Wie kann ich das tun?

Bisher habe ich:

hide = ""
for l in LIST:
 if l[1] != " ":
  hide = hide + "_"
else:
  hide = hide + " "
print(hide)

Dies gibt mir nicht die gewünschte Ausgabe. Ich würde mich über Vorschläge freuen.

Danke!

1
Ric Alex 22 Feb. 2020 im 21:37

4 Antworten

Beste Antwort

Sie müssen die Zeichen in der Zeichenfolge in einer verschachtelten Schleife durchlaufen und die Nicht-Leerzeichen durch _ ersetzen.

result = []
for word1, word2 in LIST:
    hide = ""
    for c in word2:
        if c == " ":
            hide += " "
        else:
            hide += "_"
    result.append([word1, hide])
0
Barmar 22 Feb. 2020 im 18:57

Sie können eine neue Liste erstellen, indem Sie das Listenverständnis verwenden und die Länge jedes Wortes berechnen, indem Sie es wie folgt durch _ ersetzen:

values = [['SPORTS','NEW YORK JETS'], ['SPORTS2','NEW YORK JETS2']]
hidden = [
    [ 
        v[0], 
        ' '.join('_'*len(word) for word in  v[1].split())
    ] for v in values
]

print(hidden)

>>> [['SPORTS', '___ ____ ____'], ['SPORTS2', '___ ____ _____']]
0
Marcos 22 Feb. 2020 im 18:59

Sie können die integrierte Funktion zum Auflisten und Filtern von Listenelementen basierend auf dem Index verwenden:

lizt = [
    ['sports', 'new york jets', 'even more values if you want'],
    ['sports2', 'new york jets2', 'even more values if you want2'],
    # ...
]

hide_list = []
for nested_list in lizt:
    hide_nested_list = []
    for index, value in enumerate(nested_list):
        if index == 1:
            hide_nested_list.append('___ ____ ____')
        else:
            hide_nested_list.append(value)
    hide_list.append(hide_nested_list)

print(hide_list)

Es ist viel kürzer mit Listenverständnis:

lizt = [
    ['sports', 'new york jets', 'even more values if you want'],
    ['sports2', 'new york jets2', 'even more values if you want2'],
    # ...
]

hide_list = [
    [v for i, v in enumerate(l) if i != 1 else '___ ____ ____'] for l in lizt
]

print(hide_list)
0
Morgan Leclerc 22 Feb. 2020 im 18:58

Versuche es damit

LIST=[['SPORTS','NEW YORK JETS']]
hide = []
for l in LIST:
 sub = []
 for sub_l in l : 
   s = ""
   for c in sub_l : 
     if c != " " :
      s += "_"
     else :
      s += " "
   sub.append(s)
hide.append(sub)

print(hide)

0
nassim 22 Feb. 2020 im 18:57