我有几个字符串存储在每行一个文件中,如下所示:
dsfsdfsd/mhgjghj
cvcv/xcvxc
werwr/erewrwer
nbmbn/iuouiouio
...
正如您所看到的那样,唯一始终存在的角色是反弹/
,其余部分的构图非常随机。我需要分别存储每一行的第一和第二部分(即:分别在反弹前后),以便最终得到这样的结果:
first_list = [dsfsdfsd, cvcv, werwr, nbmbn, ...]
secnd_list = [mhgjghj, xcvxc, erewrwer, iuouiouio, ...]
我可以在python迭代通过每一行,检查是否存在反冲并分别存储行的每个部分的内容。它看起来像这样:
first_list, secnd_list = [], []
for line in file:
for indx, char in enumerate(line):
if char == '/':
first_list.append(line[:(indx-1)])
secnd_list.append(line[(indx-1):])
break
我正在寻找这个代码的更漂亮(更pythonic)版本。
答案 0 :(得分:6)
split()
可能派上用场:
first_list, secnd_list = [], []
for line in file:
first, second = line.split('/')
first_list.append(first)
secnd_list.append(second)
这里假设的一个假设是只存在一个/
。知道,split('/')
将始终返回2元组元素。如果此假设为假,请尝试split('/', 1)
- 它将分割数限制为1,从左到右计数。
答案 1 :(得分:4)
与str.split
一样,您可以使用str.partition
:
first_parts = []
second_parts = []
for line in file:
before, _, after = line.partition('/')
first_parts.append(before)
second_parts.append(after)
另一种更具功能性的oneliner:
first_parts, _, second_parts = zip(*(line.partition('/') for line in file))
两个选项中_
的说明 - str.partition
返回一个元组:(first_part, seperator, last_part)
。在这里,我们不需要分离器(实际上我无法想象你为什么会这样),所以我们将它分配给一次性变量_
。