1

我有几个字符串存储在一个文件中,每行一个,如下所示:

dsfsdfsd/mhgjghj
cvcv/xcvxc
werwr/erewrwer
nbmbn/iuouiouio
...

如您所见,唯一始终存在的字符是 backlash /,其余的在其组成中非常随机。我需要分别存储每行的第一部分和第二部分(即:分别在反冲之前和之后),以便最终得到这样的结果:

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)的版本。

4

2 回答 2

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,从左到右计数。

于 2013-11-06T20:20:08.340 回答
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). 在这里,我们不需要分隔符(实际上我无法想象你为什么会需要),所以我们将它分配给一次性变量_

是 的文档str.partition这里是 的文档str.split

于 2013-11-06T20:25:27.513 回答