我有一个字符串列表:
['splitter001','stringA','stringB','splitter_1234','stringC']
我希望我的最终结果是:
^{pr2}$拆分器分隔符不是相同的字符串。在
我尝试过。如果元素索引>0,则查找“拆分器”,然后删除索引[:2nd splitter]并将第一个组追加到新列表中,但这无法正常工作。在
我在所有字符串上迭代for循环,但它不适用于第二组,因此我可以得到:
[ ['splitter001','stringA','stringB'] ] as my new list, but the second group is missing.
我读过很多关于这个主题的答案,最接近的解决方法是使用:
[list(x[1]) for x in itertools.groupby(myList, lambda x: x=='#') if not x[0]]
但是我不明白这个语法。。。我读过groupby和intertools,但我不确定这对我的情况是否有用。在
获取
startswith('splitter')
元素的索引,然后在这些索引处对列表进行切片这里有一种方法可以使用
groupby
。我们告诉groupby
查找以“splitter”开头的字符串。这将创建两种类型的组:以“splitter”开头的字符串和所有其他字符串。例如输出
^{pr2}$所以我们可以把这些组分成两个列表,然后将它们压缩在一起,形成最终的列表。在
输出
这里有一个更简洁的方法来完成同样的事情,使用列表列表来存储头和尾列表:
输出
如果要在单独的行上打印每个子列表,简单的方法是使用
for
循环来完成,而不是创建out
列表。在输出
另一种方法是将子列表转换为字符串,然后用换行符将它们连接在一起以创建一个大字符串。在
最后一个变体将两种类型的组存储到一个迭代器对象中。我想你会同意以前的版本更容易阅读。:)
下面是一种使用
for
循环的方法,如您所述,它处理第二组的情况:这里的关键是在循环之外的末尾再执行一次附加,以捕获最后一个组。在
输出:
^{pr2}$编辑:添加代码说明。在
我们创建一个临时变量
current_list
,以保存将附加到最终输出split_strings
的每个列表。在循环输入中的字符串。对于每个字符串
s
,检查它是否包含'splitter'
。如果有,并且current_list
不是空的,这意味着我们已经找到了下一个分隔符。将current_list
追加到输出并清除它,这样我们就可以开始收集下一组字符串的项。在检查之后,将当前字符串追加到
current_list
。这是因为我们在找到分隔符后将其清除(设置为[]
)。在在列表的末尾,我们将剩余的内容附加到输出中,如果有的话。在
相关问题 更多 >
编程相关推荐