相关疑难解决方法(0)

根据Python中的一组索引将列表拆分为多个部分

基于任意数量的索引将列表拆分为多个部分的最佳方法是什么?例如,给出下面的代码

indexes = [5, 12, 17]
list = range(20)
Run Code Online (Sandbox Code Playgroud)

返回这样的东西

part1 = list[:5]
part2 = list[5:12]
part3 = list[12:17]
part4 = list[17:]
Run Code Online (Sandbox Code Playgroud)

如果没有索引,则应返回整个列表.

python list

50
推荐指数
4
解决办法
5万
查看次数

如何在元素分隔符上拆分列表

是否有通过分隔元素将Python中的列表拆分为子列表的简洁而优雅的方法,例如['a', 'delim', 'b']- > [['a'], ['b']]

这是一个例子:

ldat = ['a','b','c','a','b','c','a','b']
dlim = 'c'
lspl = []   # an elegant python one-liner wanted on this line!
print(lspl) # want: [['a', 'b'], ['a', 'b'], ['a', 'b']]
Run Code Online (Sandbox Code Playgroud)

看似过于复杂的工作示例

我已经调查了关于stackoverflow的文档和相关问题 - 下面引用了很多 - 这些都没有回答我的问题,并且总结了我的研究如下:几种方法确实产生了所需的输出,但是冗长而错综复杂,以及发生了什么(分裂了列表)并不是很明显 - 你真的不得不眯着眼睛.

还有更好的方法吗?我主要关注初学者的可读性(例如教学),规范/'Pythonic'方法,其次是最有效的方法(例如,时间速度).理想情况下,答案将解决Python 2.7和3.x.

有条件的.append()

循环遍历列表并附加到最​​后一个输出列表或添加新的输出列表.基于包含分隔符的示例,但已更改为排除它.我不确定如何使它成为一个单行,或者如果这甚至是可取的.

lspl = [[]]
for i in ldat:
    if i==dlim:
        lspl.append([])
    else:
        lspl[-1].append(i)
print(lspl) # prints: [['a', 'b'], ['a', 'b'], ['a', 'b']]
Run Code Online (Sandbox Code Playgroud)

与itertools.groupby

将itertools.groupby与列表理解相结合.许多答案包括分界符,这是基于那些排除分界符的. …

python split list

10
推荐指数
1
解决办法
4172
查看次数

如何将列表拆分为以分隔符开头的子列表?

  • 我想将列表拆分为以分隔符开头的子列表
    • 必须保留定界符
    • 分隔符必须是每个子列表的第一个字符

例子:

delimiter = "x" 
input = ["x","a","x","x",1,2,3,"a","a","x","e"]
output = [["x","a"], ["x"], ["x",1,2,3,"a","a"], ["x","e"]]
Run Code Online (Sandbox Code Playgroud)
  • 除了下面的解决方案,请参阅Python 根据分隔符单词拆分列表
    • 问题类似,但预期输出略有不同。例如,那里的顶级解决方案返回并在索引 0 处为空列表。

python split list

5
推荐指数
2
解决办法
330
查看次数

Python - 计算指定值范围内的列表元素

我有很多单词:

my_list = ['[tag]', 'there', 'are', 'many', 'words', 'here', '[/tag]', '[tag]', 'some', 'more', 'here', '[/tag]', '[tag]', 'and', 'more', '[/tag]']
Run Code Online (Sandbox Code Playgroud)

我希望能够计算整个列表中[tag]元素之间(和包括)元素的数量.目标是能够看到频率分布.

我可以range()用来开始和停止字符串匹配吗?

python

2
推荐指数
1
解决办法
2255
查看次数

Python:根据元素子集将列表拆分为多个列表

每当出现特定字符或一组字符时,我试图将我拥有的列表拆分为单独的列表。

例如。

Main_list = [ 'abcd 1233','cdgfh3738','hryg21','**L**','gdyrhr657','abc31637','**R**','7473hrtfgf'...]
Run Code Online (Sandbox Code Playgroud)

每当遇到“L”或“R”时,我想打破这个列表并将其保存到子列表中

期望的结果:

sublist_1 = ['abcd 1233','cdgfh3738','hryg21']
sublist_2 = ['gdyrhr657','abc31637']
sublist 3 = ['7473hrtfgf'...]
Run Code Online (Sandbox Code Playgroud)

是否有内置函数或快速方法可以做到这一点?

编辑:我不希望分隔符出现在列表中

python split python-3.x

2
推荐指数
1
解决办法
1万
查看次数

Pythonic方法通过条件给定的分隔符将列表拆分为多个部分

我有一个列表,我想将它分成几部分,就像str.split()字符串的作品一样,有以下不同之处:

  1. 分隔符由谓词给出.如果谓词是True列表的元素,则此元素被视为分隔符.
  2. 我想将结果列在结果列表中.

例如:

split_by_predicate([0, "One", 1, 2, 3, 
                    "Two", 4, 5, 6, 7, "Three", "Four"],
                    predicate=lambda x: isinstance(x, str))
Run Code Online (Sandbox Code Playgroud)

应该给我

[[0], ["One", 1, 2, 3], ["Two", 4, 5, 6, 7], ["Three"], ["Four"]]
Run Code Online (Sandbox Code Playgroud)

我可以写下面的代码:

def split_by_predicate(it, predicate):
    lst = []
    cur = []
    for element in it:
       if predicate(element):
          lst.append(cur)
          cur = []
       cur.append(element)
    lst.append(cur)
    return lst
Run Code Online (Sandbox Code Playgroud)

但我发现它不优雅而不是Pythonic.这里给出类似的方法(使用生成器).

我试图找出itertools这样的某种类型的解决方案,但是如果重复定界(例如我的例子),它们就不能很好地工作.

有没有想法如何以比我当前的代码更多的功能风格来做?

python functional-programming

1
推荐指数
1
解决办法
57
查看次数

Python groupby通过分隔符拆分列表

我是Python(3.6)的新手,并且正在努力理解itertools groupby.我有以下包含整数的列表:

    list1 = [1, 2, 0, 2, 3, 0, 4, 5, 0]
Run Code Online (Sandbox Code Playgroud)

但是列表也可能更长,并且在每对数字之后不必出现'0'.它也可以是3,4或更多的数字.我的目标是将此列表拆分为子列表,其中"0"用作分隔符,并且不会出现在任何这些子列表中.

    list2 = [[1, 2], [2, 3], [4, 5]]
Run Code Online (Sandbox Code Playgroud)

这里已经解决了类似的问题: Python基于分隔符单词分割列表 答案2似乎对我有很大的帮助但不幸的是它只给了我一个TypeError.

    import itertools as it

    list1 = [1, 2, 0, 2, 3, 0, 4, 5, 0]

    list2 = [list(group) for key, group in it.groupby(list1, lambda x: x == 0) if not key]

    print(list2)
Run Code Online (Sandbox Code Playgroud)

文件"H:/Python/work/ps0001/example.py",第13行,在list2 = [list(group)for key,group in it.groupby(list,lambda x:x =='0')if if not键]

TypeError:'list'对象不可调用

我很感激任何帮助,并很高兴终于了解groupby.

python split list delimiter

1
推荐指数
1
解决办法
630
查看次数

按特定元素拆分列表以获取Python列表

输入

['~', 'n1', 'n2', ..., 'nn', '~', 'k1', 'k2', ..., 'kn', '~']
Run Code Online (Sandbox Code Playgroud)

期望的输出:

[['n1', 'n2', ..., 'nn'],['k1', 'k2', ..., 'kn']]
Run Code Online (Sandbox Code Playgroud)

我见过itertools groupby但是无法让它工作.任何帮助,将不胜感激.另外......实际上并不在列表中,只是说中间有更多元素

python list python-3.x

1
推荐指数
1
解决办法
41
查看次数