leere Elemente aus Liste entfe < Mathematica < Mathe-Software < Mathe < Vorhilfe
|
Aufgabe | Wie entferne ich leere Elemente aus einer Liste? |
Hallo.
Also ich habe mir aus einer Liste mittels StringPattern Elemente ausgesucht die mich interessieren.
Nun erscheinen aber im Ergebniss leere Elemente/Strings.
Z.B.: Mit:
StringCases[ExampleData["Text"][ [All, 2] ], "UNHuman" ~~ __]
bekomme ich:
{{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {},
{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {},
{"UNHumanRightsChinese"}, {"UNHumanRightsDanish"},
{"UNHumanRightsDutch"}, {"UNHumanRightsEnglish"},
{"UNHumanRightsEsperanto"}, {"UNHumanRightsFrench"},
{"UNHumanRightsGerman"}, {"UNHumanRightsGreek"},
{"UNHumanRightsHawaiian"}, {"UNHumanRightsIndonesian"},
{"UNHumanRightsIrish"}, {"UNHumanRightsJapanese"},
{"UNHumanRightsKorean"}, {"UNHumanRightsLatin"},
{"UNHumanRightsMaori"}, {"UNHumanRightsRussian"},
{"UNHumanRightsScottishGaelic"}, {"UNHumanRightsSpanish"},
{"UNHumanRightsSwahili"}, {"UNHumanRightsSwedish"}, {}}
Wie kann ich einen Liste bekommen in der die {} nicht mehr stehen?
Geht das auch indem ich mein StringPattern erweitere?
Grüße pleaselook.
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:39 Fr 15.04.2011 | Autor: | pleaselook |
Ok. mit Flatten[] hab ichs hinbekommen. Gehts trotzdem auch mit StringPattern?
|
|
|
|
|
Hallo!
Pattern: ja, String: nein.
Die Listenstruktur, die zurückgegeben wird hat ja nichts mit dem Stringinhalt zu tun, sondern spiegelt (rudimentär) die Struktur der Liste, in der gesucht wurde, wider.
Nennen wir mal das Ergebnis von StringCases erg.
Statt des schnellen und einfachen Flatten[erg] kannst Du, falls Du auf der Verwendung von Patternmatching bestehst, auch Replace[erg, {elem___} :> elem, {1, Infinity}] verwenden. Dies ersetzt in geschweifte Klammern eingeschlossene Elemente durch die Elemente selbst (was bei leeren Mengen natürlich zur Löschung von {} führt) und zwar vom ersten (nicht nullten!) Level bis zur maximalen Tiefe der Listenstruktur.
Eine Alternative ist, einen Befehl zu verwenden, der für beliebige Listen gedacht ist und als Testkriterium eine Stringfunktion z verwenden, wie z.B.:1: | Select[ExampleData["Text"][[All, 2]],
| 2: | StringPosition[#, "UNHuman", 1] === {{1, 7}} &] |
Gruß,
Peter
P.S.: und dann war da noch FixedPoint[Sequence @@@ # &, erg].
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:10 Fr 15.04.2011 | Autor: | pleaselook |
Ok. Danke! Für die Hinweise. Wenn du sagst die Flatten-Methode ist gut, dann lass ich das dabei.
Nettes Wochenende!
|
|
|
|