【问题标题】:How to slice a list and store as a multiple list based on condition python如何根据条件python对列表进行切片并存储为多个列表
【发布时间】:2020-10-07 01:35:55
【问题描述】:

我有超过 1000 个字符串的列表,我想根据条件将列表分割成子列表。例如,我有一个看起来像的列表。

my_list = ['pdf', 'csv', 'csv','csv','txt','txt','txt','txt','pdf','pdf','csv','txt','txt','pdf', 'csv', 'csv','pdf','csv','txt','txt' ]

分成多个子列表。切片的条件是单词作为集合重复的时间。每个子列表都应该增加排序集,实际上我有超过 1000 个字符串。

所以最终结果看起来像

lst_1=['pdf', 'csv','txt']    
lst_2=['pdf', 'csv','txt']
lst_3=['pdf', 'csv']
lst_4=['pdf', 'csv','txt']
.
.
so on...

我有一些类似下面的东西会出错。

arrays = [[my_list[0]]]
for i in range(1, len(my_list)):
    if 'pdf','csv','txt' in i:
        arrays[len(arrays)-1].append(my_list[i])
print(sorted(set(arrays)))

谁能帮我解决这个问题?

谢谢!

【问题讨论】:

    标签: python python-3.x list arraylist slice


    【解决方案1】:

    试试这个,

    my_list = ['pdf', 'csv', 'csv','csv','txt','txt','txt','txt','pdf','pdf','csv','txt','txt','pdf', 'csv', 'csv','pdf','csv','txt','txt' ]
    
    counter = [0,0,0]
    counter[0]=my_list.count('pdf')
    counter[1]=my_list.count('csv')
    counter[2]=my_list.count('txt')
    
    l2=[]
    lists = []
    pdf,csv,txt=counter
    
    for i in range(max(counter)):
    
        l2=[]
        if pdf>=0:
            l2.append('pdf')
            pdf-=1
        if csv>=0:
            l2.append('csv')
            csv-=1
        if txt>=0:
            l2.append('txt')
            txt-=1
    
        lists.append(l2)
    
    print(lists)
    

    输出:

    [['pdf', 'csv', 'txt'], ['pdf', 'csv', 'txt'], ['pdf', 'csv', 'txt'], ['pdf', 'csv', 'txt'], ['pdf', 'csv', 'txt'], ['pdf', 'csv', 'txt'], ['csv', 'txt'], ['csv', 'txt']]
    

    希望对你有帮助!

    【讨论】:

    • 这不会给出排序的嵌套列表。
    • @DarshanMahalingeGowda 它提供了一个嵌套列表!你能解释一下你的列表应该如何排序吗?
    • 正如你给出的输出它应该看起来一样,但现在我得到了更多的嵌套列表,只有 [['csv'],['csv'],['csv'], ['csv'],['csv'],['csv'],['csv']] 仅以您为例,我应该只获得 4 组嵌套列表,但在您的情况下它给出 8。
    • @DarshanMahalingeGowda 你给这个项目的清单是什么
    • list 与我提出的问题相同,但实际上我在一个列表中有超过 1000 个字符串,我知道它有 5 个集合,只有 1000 个重复的字符串,所以我应该只得到 5 个嵌套的集合列表。 @Prathamesh
    【解决方案2】:

    您可以使用简单的字典进行计数。

    myDict = dict()
    for s in my_list:
        if s in myDict:
           myDict[s] += 1
        else:
           myDict[s] = 1
    lists = [['pdf', 'csv', 'txt'] for i in range(min(myDict.values()))]
    

    上面的代码计算my_list中每个元素的出现次数,并创建另一个列表列表。您可能需要稍作修改才能获得所需的输出,因为不清楚输出到底应该是什么

    【讨论】:

    • 这给出了一个错误,说'int'对象不可迭代。
    • 我添加了一个 range() 来修复该错误。你能再解释一下你期望的输出吗?
    • 我应该得到嵌套的集合列表。
    【解决方案3】:

    您可以简单地计算出现次数,然后在需要时重新创建列表。

    counter = [0,0,0]
    for i in my_list:
        if i == "pdf":
            counter[0] += 1
        elif i == "csv":
            counter[1] += 1
        elif i == "txt":
            counter[1] += 1
    

    然后在知道其中有多少之后,您可以遍历计数最低的字符串并创建列表。

    lists = [['pdf', 'csv','txt'] for i in min(counter)]
    

    【讨论】:

    • 嗨,这给出了一个错误,说元组对象不支持项目分配@mahmut asım Onat
    • 好的,将其更改为列表。元组是不可变的。
    猜你喜欢
    • 2020-09-14
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多