Python 如果列表中的字符串可以连续连接而中间没有整数,那么如何连接这些字符串?
我有一个可以包含字符串和整数的列表,但我想连接所有相邻的字符串,前提是这些字符串之间没有整数。 例如:Python 如果列表中的字符串可以连续连接而中间没有整数,那么如何连接这些字符串?,python,loops,Python,Loops,我有一个可以包含字符串和整数的列表,但我想连接所有相邻的字符串,前提是这些字符串之间没有整数。 例如: list_a = [0, 0, "c", "a", "k", "e", 0, 0, "y", "o", "u", 0] taken = [] for let in list_a: if let == 0: pass else
list_a = [0, 0, "c", "a", "k", "e", 0, 0, "y", "o", "u", 0]
taken = []
for let in list_a:
if let == 0:
pass
else:
taken.append(let)
word = "".join(taken)
print(word)
>> cakeyou
我想得到“蛋糕”或“你”或两者都作为两个词。“Cakeyou”不应该是一个输出,因为要获得“Cakeyou”,循环将移动通过两个零,当它在读取一些字符串后遇到任何零时就应该停止。
另一个重要的细节是单词cake或you可以在列表中的任何位置,为了简单起见,我选择了索引(因此切片将不是一个可行的选项)我建议,当值为
int
时,您放置一个空格,然后连接,并使用strip()
移动前导空格和填充空格
list_a = [0, 0, "c", "a", "k", "e", 0, 0, "y", "o", "u", 0]
taken = []
for let in list_a:
if isinstance(let, int):
taken.append(" ")
else:
taken.append(let)
word = "".join(taken).strip()
print(word) # 'cake you'
我的解决方案:
将所有内容都设为字符串,去掉前导零和尾随零,并用双零分割。而不是抓住第一个入口。(不包括无效输入的错误处理)
关于历史,我的第一个答案是:
我的建议是在列表中使用过滤器:
list_a = [0, 0, "c", "a", "k", "e", 0, 0, "y", "o", "u", 0]
taken = [e for e in list_a if isinstance(e, str)]
word = "".join(taken)
print(word)
>> cakeyou
list_a=[0,0,“c”,“a”,“k”,“e”,0,0,“y”,“o”,“u”,0]
采取=[];toadd='';开=假
对于枚举中的c,l(列表a):
如果类型(l)!=int:
开=真
toadd+=l
其他:
如果打开:
take.append(toadd)
toadd=''
开=假
如果c==len(列表a)-1:
如果打开:
take.append(toadd)
toadd=''
打印(已拍摄)
#>>>[‘蛋糕’、‘你’]
这适合你吗
list_a = [0, 0, "c", "a", "k", "e", 0, 0, "y", "o", "u", 0]
words = []
word = ""
for letter in list_a:
if letter == 0 and word == "":
pass
elif letter == 0:
words.append(word)
word = ""
else:
word += letter
print(words)
#>>>['cake', 'you']
您可以使用哪个键根据某个键拆分序列。如果我们说关键是值是一个str
,那么我们得到一组str
值。我们还得到一个值,表示该键的计算值是True
还是False
。然后,我们可以筛选出str
值组和int
值组:
>>> from itertools import groupby
>>> values = [0, 0, "c", "a", "k", "e", 0, 0, "y", "o", "u", 0]
>>> for keep, group in groupby(values, key=lambda value: isinstance(value, str)):
... if keep:
... print(''.join(group))
cake
you
如果let==0:pass,循环将移动通过两个零,这正是我将使用的
所做的。请参阅“Cakeyou”不应该是一个输出您可以这样做:[e if is instance(e,str)else''for e in list_a]
是的,对不起,没有阅读所有内容…编辑为新的解决方案。我建议将word=''.join(take.strip()
替换为word=''.join(word中的逐字连接)。join(take.split if word!='')
它稍微长一点,但是去掉了不需要的空格,例如字符串之间有很多整数,所以打印出来不会产生大量空格。非常感谢@Supernyv你可以考虑接受答案,所以(绿色勾号仅左);)这对于它正在解决的问题来说似乎太复杂了。如果你想检查整数而不是仅仅“0”,你可以用if-isinstance(letter,int)替换if-letter==0。很抱歉,这篇评论中的格式太糟糕了。这太完美了!我得到一个提示,所以最后一个if语句是不需要的。在声明list_a之后,添加了list_a.append(0)。
list_a = [0, 0, "c", "a", "k", "e", 0, 0, "y", "o", "u", 0]
words = []
word = ""
for letter in list_a:
if letter == 0 and word == "":
pass
elif letter == 0:
words.append(word)
word = ""
else:
word += letter
print(words)
#>>>['cake', 'you']
>>> from itertools import groupby
>>> values = [0, 0, "c", "a", "k", "e", 0, 0, "y", "o", "u", 0]
>>> for keep, group in groupby(values, key=lambda value: isinstance(value, str)):
... if keep:
... print(''.join(group))
cake
you