在具有相同元素的较小列表上拆分列表

时间:2017-02-28 20:05:34

标签: python python-3.x

在我的列表" A"我有数字和' ',所以我想列出一个名为eg" b"的列表,每个列表应该有9个号码(如果可能的话),无论它有多少' &#39 ;. 知道怎么做吗?

A = ['1', '3', '4', '5', '7', '8', '9', ' ', '13', '16', '3', ' ', '5', '17']
B = [ ['1', '3, '4', '5', '7', '8', '9', ' ', '13', '16'], ['3', ' ', '5', '17'] ]

4 个答案:

答案 0 :(得分:0)

这将对您有所帮助:

>>> a = ['1', '3', '4', '5', '7', '8', '9', ' ', '13', '16', '3', ' ',        '5', '17']
>>> b=[a[i:i+9] for i in xrange(0,len(a),9)] 
>>> b
[['1', '3', '4', '5', '7', '8', '9', ' ', '13'], ['16', '3', ' ', '5', '17']]
>>> 

答案 1 :(得分:0)

这可以通过两个嵌套的while循环来完成:

>>> A = ['1', '3', '4', '5', '7', '8', '9', ' ', '13', '16', '3', ' ', '5', '17']
>>> B = []
>>> while A:
...    L = []
...    c = 0
...    while A and c < 9:
...        L.append(A.pop(0))
...        if L[-1].isdigit():
...           c += 1
...    B.append(L) 
... 
>>> B
[['1', '3', '4', '5', '7', '8', '9', ' ', '13', '16'], ['3', ' ', '5', '17']]

外部循环,而A不为空,内部循环,而A不为空,并且附加到当前子列表的仅数字字符串的数量小于9.计数器仅在由字符串组成的字符串后递增只找到数字。

答案 2 :(得分:0)

值得您花时间深入了解列表理解

并且Python 3.x中没有xrange,或者更确切地说范围(在3.x中)与xrange在Python 2.x中所做的完全相同。

A = ['1', '3', '4', '5', '7', '8', '9', ' ', '13', '16', '3', ' ', '5', '17']
B = [i for i in A[0:9]]  #is cleaner.

虽然我不确定你的目标是什么。你想要第二个列表(我想到的剩余列表)在同一个变量中吗?因此,如果列表中有28个元素,则需要三个列表9和一个列表1?

答案 3 :(得分:0)

这是一个有点脏的解决方案,但我认为你可能需要检查isdigit part和pop。

def take(lst, n):
    if not lst:
        return ValueError("Empty list, please check the list.")
    items = list(lst)
    new_list = []
    count = 0
    while items:
        item = items.pop(0)
        new_list.append(item)
        if item.isdigit():
            count += 1
        if count >= n:
            yield new_list
            new_list = []
            count = 0
    if new_list:
        yield new_list


A = ['1', '3', '4', '5', '7', '8', '9', ' ', '13', '16', '3', ' ', '5', '17']
B = [ii for ii in take(A, 9)]
#[['1', '3', '4', '5', '7', '8', '9', ' ', '13', '16'], ['3', ' ', '5', '17']]

检查以下内容: