簡體   English   中英

嵌套列表理解 - python

[英]Nested list comprehension - python

可能有一個非常簡單的解決方案,但我似乎無法找到它。

我有多個名稱,我試圖將它們連接在一起:

dir_name = ['bseg', 'ekpo']
sys_name = ['a3p065', 'a3p100']
paths = [os.path.join(a, b) for a in (os.path.join(os.getcwd(), name) for name in sys_name) for b in dir_name]

paths給了我:

['C:path\\a3p065\\bseg', 'C:path\\a3p065\\ekpo', 'C:path\\a3p100\\bseg', 'C:path\\a3p100\\ekpo']

但是我需要這樣的格式:

[['C:path\\a3p065\\bseg', 'C:path\\a3p065\\ekpo'], ['C:path\\a3p100\\bseg', 'C:path\\a3p100\\ekpo']]

列表的嵌套需要嵌套的列表推導。 一個迭代dir_names ,另一個迭代sys_names 嘗試這個:

dir_name = ['bseg', 'ekpo']
sys_name = ['a3p065', 'a3p100']
paths = [[os.path.join(a, b) for a in (os.path.join(os.getcwd(), name) for name in sys_name)] for b in dir_name]

您實際上沒有嵌套列表理解; 你有兩個迭代器的單一理解。

相比

[x for y in z for x in y]  # One comprehension, two iterators

[[x for x in y] for y in z]  # Two comprehensions, each with a single iterator

對於您的情況,您需要以后者為模型的東西:

dir_name = ['bseg', 'ekpo']
sys_name = ['a3p065', 'a3p100']


paths = [[os.path.join(os.getcwd(), s, d) for d in dir_name] for s in sys_name]

像這樣的東西? (我使用"."作為根路徑,但請隨意使用os.getcwd() 。)

import os

dir_names = ["bseg", "ekpo"]
sys_names = ["a3p065", "a3p100"]
localized_sys_names = [os.path.join(".", name) for name in sys_names]
paths = [
    [os.path.join(sys_name, dir_name) for sys_name in sys_names]
    for dir_name in dir_names
]

print(paths)

Output:

[['a3p065/bseg', 'a3p100/bseg'], ['a3p065/ekpo', 'a3p100/ekpo']]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM