Andrew Zyman wrote: > On Thursday, March 2, 2017 at 11:27:34 AM UTC-5, Peter Otten wrote: >> Andrew Zyman wrote: >> ..... >> ..... >> > End result: >> > ll =[ [a,1], [b,2], [c,3], [blah, 1000, 'new value'] ] >> >> >>> outer = [["a", 1], ["b", 2], ["c", 3], ["blah", 1000]] >> >>> for inner in outer: >> ... if inner[0] == "blah": >> ... inner.append("new value") > > thank you. this will do. > Just curious, is the above loop can be done in a one-liner?
Ah, that newbie obsession ;) >>> outer = [["a", 1], ["b", 2], ["c", 3], ["blah", 1000]] >>> [inner + ["new value"] if inner[0] == "blah" else inner for inner in outer] [['a', 1], ['b', 2], ['c', 3], ['blah', 1000, 'new value']] Note that there is a technical difference to be aware of -- matching lists are replaced rather than modified. >> While this is what you are asking for it will get slower as the list >> grows. A better solution uses a dictionary: > >> >>> lookup = {inner[0]: inner[1:] for inner in outer} > > Yes, understood, i don't expect the list to grow above a few thousand > entries. But i do agree that utilizing the dict is more efficient. -- https://mail.python.org/mailman/listinfo/python-list