【问题标题】:How to generate new list for each element of existing list (which is also generated)?如何为现有列表的每个元素(也生成)生成新列表?
【发布时间】:2021-08-16 15:42:09
【问题描述】:

我有包含一些路径的列表:

['folder1/folder2/Module1', 'folder4/folder5/Module2', 'folder7/folder8/Module3', 'folder12/folder13/Module4', 'folder17/folder20/folder50/Module5' .. etc]

提取该列表的每个元素并创建新列表或其他位置以存储具有特定名称的路径的最佳方法是什么?

Mu 当前代码用于遍历列表的每个元素并一个一个地存储它,但我无法为每个元素生成新列表,不确定这是否可能:

for j in range(len(listOfPaths)):
  del pathList[:]
  path = listOfPaths[j]
  pathList.append(path)

所以要澄清一下,最后我需要的是获得一个列表列表 [Module1],其中仅包含“文件夹 1/文件夹 2/模块 1”,第二个列表 [模块 2] 仅包含模块 2 的路径,等等...

【问题讨论】:

  • 稍微扩展您的答案可能会有所帮助,并提供一个更好的示例来说明您希望输出的外观。通常你通过索引(数字)访问列表,所以像list[Module2] 这样的东西就是list[1]。如果你想要更具体的东西,比如list[Module2],你可能需要一个字典。

标签: python arrays list element generate


【解决方案1】:

这里最好使用字典而不是列表。

#!/usr/bin/env python3
import os

paths = []

paths.append("folder1/subfolderA/Module1")
paths.append("folder2/subfolderB/Module1")
paths.append("folder3/subfolderC/Module1")

paths.append("folder4/subfolderD/Module2")
paths.append("folder5/subfolderE/Module2")

paths.append("folder6/subfolderF/Module50")



# create an empty dictionary
modulesDict = {}
# it will look like this:
#  "ModuleX" -> ["path1/to/ModuleX", "path2/to/ModuleX", ...]
#  "ModuleY" -> ["path3/to/ModuleY", "path4/to/ModuleY", ...]

for path in paths: # loop over original list of paths
    # take only the "ModuleX" part
    moduleName = os.path.basename(os.path.normpath(path))
    # check if its already in our dict or not
    if moduleName in modulesDict:
        # add the path to the list of paths for that module
        modulesDict.get(moduleName).append(path)
    else:
        # create an new list, with only one element (only the path)
        modulesDict[moduleName] = [path]


print(modulesDict)


输出:(格式化了一下)

{
'Module1':
    ['folder1/subfolderA/Module1', 'folder2/subfolderB/Module1', 'folder3/subfolderC/Module1'],
'Module2':
    ['folder4/subfolderD/Module2', 'folder5/subfolderE/Module2'],
'Module50':
    ['folder6/subfolderF/Module50']
}


【讨论】:

    【解决方案2】:

    检查一下?

    temp=['folder1/folder2/Module1', 'folder4/folder5/Module2', 'folder7/folder8/Module3', 'folder12/folder13/Module4', 'folder17/folder20/folder50/Module5']
    # List initialization
    Output = [] 
      
    # Using Iteration to convert 
    # element into list of list
    for elem in temp:
        temp3=[]
        temp3.append(elem)
        Output.append(temp3)
      
    # printing
    print(Output)
    

    输出:

    [['folder1/folder2/Module1'], ['folder4/folder5/Module2'], ['folder7/folder8/Module3'], ['folder12/folder13/Module4'], ['folder17/folder20/folder50/Module5']]
    

    【讨论】:

    • 是的,但这意味着您将获得包含 temp 包含的所有元素的新列表,因此基本上您将再次获得 temp :)
    • 我需要的是获得一个列表列表[Module1],其中仅包含'folder1/folder2/Module1',第二个列表[Module2] 仅包含到Module2 的路径,等等...跨度>
    • 所以需要将一个列表拆分成多个列表
    • 是的,类似的
    【解决方案3】:

    我想你可以试试这个:

    input=["stra", "strb"]

    输出 =list(map(lambda x: [x], 输入))

    【讨论】:

    • 无法获得输出
    • “input”中的“i”是大写的,可以再试一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-31
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2021-05-20
    相关资源
    最近更新 更多