Joining elements in Python list

老子叫甜甜 提交于 2020-03-06 09:24:08

问题


Given a string, say s='135' and a list, say A=['1','2','3','4','5','6','7'], how can I separate the values in the list that are also in 's' (a digit of s) from the other elements and concatenate these other elements. The output in this example should be: A=['1','2','3','4','5','67']. Another example: s='25' A=['1','2','3','4','5','6','7'] output: A=['1','2','34','5','67']

Is there a way of doing this without any import statements (this is so that I can get a better understanding of Python and how things work)?

I am quite new to programming so any help would be appreciated!

(Please note: This is part of a larger problem that I am trying to solve).


回答1:


You can use itertools.groupby with a key that tests for membership in your number (converted to a string). This will group the elements based on whether they are in s. The list comprehension will then join the groups as a string.

from itertools import groupby

A=['1','2','3','4','5','6','7']
s=25
# make it a string so it's easier to test for membership
s = str(s)

["".join(v) for k,v in groupby(A, key=lambda c: c in s)]
# ['1', '2', '34', '5', '67']

Edit: the hard way

You can loop over the list and keep track of the last value seen. This will let you test if you need to append a new string to the list, or append the character to the last string. (Still itertools is much cleaner):

A=['1','2','3','4','5','6','7']
s=25
# make it a string
s = str(s)

output = []
last = None

for c in A:
    if last is None:
        output.append(c)
    elif (last in s) == (c in s):
        output[-1] = output[-1] + c
    else:
        output.append(c)
    last = c

output # ['1', '2', '34', '5', '67']



回答2:


A little twist to @Mark's answer?

I think this yields the result.

from itertools import groupby

A=['1','2','3','4','5','6','7']
s=25
# make it a string so it's easier to test for membership
s = str(s)

print(["".join(v) for k,v in groupby(A, key=lambda c: c in s) if str(k) not in s ])
# ['1', '2', '34', '5', '67']


来源:https://stackoverflow.com/questions/59813650/joining-elements-in-python-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!