Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果列表中的字符串可以连续连接而中间没有整数,那么如何连接这些字符串?_Python_Loops - Fatal编程技术网

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