Elemente zu einer Sammlung von Listen hinzufügen

  • Ich möchte das Element a am Anfang einer Reihe von Listen hinzufügen.

    Zum Beispiel habe ich eine Sammlung von Listen mit dem Namen

     LISTS1 = {{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7},{4,5,6,7,8}}
     

    Nun möchte ich am Anfang der ersten Liste ein 0 hinzufügen, zwei 0 s zur zweiten Liste und so weiter, um zu erhalten:

     {{0,1,2,3,4,5},{0,0,2,3,4,5,6},{0,0,0,3,4,5,6,7},{0,0,0,0,4,5,6,7,8}}.
     

    Ich vermute, dass dies mit Hilfe der Prepend Befehl in Kombination mit etwas, um die Anzahl der Elemente zu ändern, die für jede einzelne Liste in der Sammlung hinzugefügt werden sollen.

    28 September 2017
    David Z
8 answers
  • Dies wäre eine nette Methode:

     LISTS1 = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}, {3, 4, 5, 6, 7}, {4, 5, 6, 7, 8}};
    
    MapIndexed[Join[Table[0, #2], #1] &, LISTS1]
     

    {{0, 1, 2, 3, 4, 5}, {0, 0, 2, 3, 4, 5, 6}, {0, 0, 0, 3, 4, 5, 6, 7}, {0, 0, 0, 0, 4, 5, 6, 7, 8}}

    27 April 2012
    Chris Degnen
  • Eine Möglichkeit ohne besonderes Augenmerk auf die Leistung:

    Beispieleingabe:

     data = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}, {3, 4, 5, 6, 7}, {4, 5, 6, 7, 8}}
     

    Lassen Sie uns die Nullen generieren ...

     zeros = ConstantArray[0, #] & /@ Range@Length[data]
     

    ... und voranstellen zu den Unterlisten:

     MapThread[Join, {zeros, data}]
     
    27 April 2012
    Szabolcs
  • Eine Variation der Methode von Szabolcs mit zusätzlicher Geschwindigkeit und Infix! ; -)

     list = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}, {3, 4, 5, 6, 7}, {4, 5, 6, 7, 8}};
    
    Join[
     0 ~ConstantArray~ # & ~Array~ Length@list,
     list,
     2
    ]
     
    27 April 2012
    Mr.Wizard
  • Eine geringfügige Variation von Chris 'Antwort:

     LISTS1 = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}, {3, 4, 5, 6, 7}, {4, 5, 6, 7, 8}};
    
    MapIndexed[ArrayPad[#1, {First[#2], 0}] &, LISTS1]
     
    27 April 2012
    helloandreDrahcir
  • So würde ich es machen:

    Table[Join[Table[0, {j, i}], LISTS1[[i]]], {i, Length[LISTS1]}]

    27 April 2012
    Ralph WillgossPratap
  • Zwei Varianten von MapThread und MapIndexed:

    MapThread mit PadLeft:

       MapThread[PadLeft[#1, #2 + Length@#1] &, {LISTS1,Range@Length[LISTS1]}]
     

    MapIndexed mit PadLeft:

        MapIndexed[PadLeft[#, #2 + Length@#1] &, LISTS1]
     
    |>
    27 April 2012
    David Z
  • Eine geringfügige Variante:

     Join[ ConstantArray[0, #], LISTS1[[#]]] & /@ Range@Length@LISTS1
     

    ergibt

     (* {{0, 1, 2, 3, 4, 5}, {0, 0, 2, 3, 4, 5, 6}, {0, 0, 0, 3, 4, 5, 6, 7}, 
        {0, 0, 0, 0, 4, 5, 6, 7, 8}} *)
     
    27 April 2012
    Jon Galloway
  •  ls = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}, {3, 4, 5, 6, 7}, {4, 5, 6, 7, 8}};
    Join[0 Range@Range@Length@ls, ls, 2]
    
    (*{{0, 1, 2, 3, 4, 5}, {0, 0, 2, 3, 4, 5, 6}, {0, 0, 0, 3, 4, 5, 6, 7},
      {0, 0, 0, 0, 4, 5, 6, 7, 8}}*)
     
    22 July 2013
    Stormenet