【问题标题】:Split list into two parts based on some delimiter in each list element in python根据python中每个列表元素中的一些分隔符将列表分成两部分
【发布时间】:2018-05-25 09:04:47
【问题描述】:

我有一个 python 列表

my_list = ['owner/NN', 'is/VBZ', 'pleasant/JJ', 'and/CC', 'entertaining/JJ', './.']

我想把它分成两部分(基于每个列表元素中出现的分隔符'/'),这样我就可以得到两个单独的列表

my_list_1 = ['owner', 'is', 'pleasant', 'and', 'entertaining', '.']
my_list_2 = ['NN', 'VBZ', 'JJ', 'CC', 'JJ', '.']

【问题讨论】:

    标签: python python-3.x split


    【解决方案1】:
    split_items = (i.split('/') for i in my_list)
    my_list1, my_list2 = zip(*split_items)
    

    这会创建 2 个元组。如果确实需要列表,可以通过

    my_list1, my_list2 = map(list, (my_list1, my_list2))
    

    【讨论】:

    • 比其他答案更pythonic,非常好!
    • 感谢您的回答,但我宁愿使用像 split_items = np.array[i.split('/') for i in my_list] 这样的 numpy,然后是 my_list_1 = split_items [:,0] 和 my_list_2 = split_items[:,1]
    • 这不是这段代码的作用吗? map部分只有当你真的需要list而不是tuple时才需要,也可以表示为my_list1, my_list2 = list(my_list1), list(my_list2)
    【解决方案2】:

    使用split 分割分隔符:

    my_list = ['owner/NN', 'is/VBZ', 'pleasant/JJ', 'and/CC', 'entertaining/JJ', './.']
    
    lst1, lst2 = [], []
    for x in my_list:
        part1, part2 = x.split('/')
        lst1.append(part1)
        lst2.append(part2)
    

    或者使用列表推导:

    lst1, lst2 = [x.split('/')[0] for x in my_list], [x.split('/')[1] for x in my_list]
    

    【讨论】:

    • 为什么不使用元组解包? part1, part2 = x.split('/'); lst1.append(part1);...
    【解决方案3】:

    你可以使用一个简单的for循环和split

    my_list = ['owner/NN', 'is/VBZ', 'pleasant/JJ', 'and/CC', 'entertaining/JJ', './.']
    
    my_list1 = []
    my_list2 = []
    for el in my_list:
         my_list1.append(el.split("/")[0])
         my_list2.append(el.split("/")[1])
    
    
    >>> my_list1
    ['owner', 'is', 'pleasant', 'and', 'entertaining', '.']
    >>> my_list2
    ['NN', 'VBZ', 'JJ', 'CC', 'JJ', '.']
    

    【讨论】:

    • 会将 el.split("/") 存储在一个变量中,而不是调用它两次。应该快一点
    • 如果要拆分的字符串很长,是的,这可能会有所帮助。但是对于那些短字符串,我认为它不应该加快计算速度:)
    【解决方案4】:

    你去吧:

    my_list = ['owner/NN', 'is/VBZ', 'pleasant/JJ', 'and/CC', 'entertaining/JJ', './.']
    my_list_1 = []
    my_list_2 = []
    delim = '/'
    for item in my_list:
        parts = item.split(delim)
        my_list_1.append(parts[0])
        my_list_2.append(parts[1])
    

    【讨论】:

      猜你喜欢
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2013-02-27
      • 1970-01-01
      • 2021-07-17
      • 2020-06-08
      • 1970-01-01
      相关资源
      最近更新 更多