Python3有助于确定动态创建列表的大多数pythonic方法

use*_*332 1 python list-comprehension python-3.x

寻求专家的帮助,以帮助我在创建的程序中做出正确的选择.创建列表的两种方法中哪一种看起来更像Pythonic并且对您可读?或者,有没有更好的方法可以做到这一点?

方法#1 - 列表理解

def test_func(*args):
    s = 'Country name: United {nm}'
    l = [s.format(nm='States') if x is 'us' 
         else s.format(nm='Arab Emirates') if x is 'uae'
         else s.format(nm='Kingdom') if x is 'uk' 
         else 'Unknown' for x in args]
    return l

# execute
test_func('us', 'uk', 'uae')

# results
['Country name: United States',
 'Country name: United Kingdom',
 'Country name: United Arab Emirates']
Run Code Online (Sandbox Code Playgroud)

方法#2 - for循环

def test_func(*args):
    s = 'Country name: United {nm}'
    l = []
    for arg in args:
        if arg is 'us':
            l.append(s.format(nm='States'))
        elif arg is 'uk':
            l.append(s.format(nm='Kingdom'))
        elif arg is 'uae':
            l.append(s.format(nm='Arab Emirates'))
        else:
            l.append(s.format(nm='Unknown'))
    return l

# execute
test_func('us', 'uk', 'uae')

# results
['Country name: United States',
 'Country name: United Kingdom',
 'Country name: United Arab Emirates']
Run Code Online (Sandbox Code Playgroud)

Ste*_*uch 6

您正在映射错误的级别.使用像这样的字典:

码:

def test_func(*args):
    mapping = {
        'us': 'United States',
        'uae': 'United Arab Emirates',
        'uk': 'United Kingdom',
    }
    return ['Country name: {}'.format(mapping.get(x, 'Unknown')) for x in args]

# execute
print(test_func('us', 'uk', 'uae', 'xyzzy'))
Run Code Online (Sandbox Code Playgroud)

结果:

[
    'Country name: United States', 
    'Country name: United Kingdom', 
    'Country name: United Arab Emirates',
    'Country name: Unknown'
]
Run Code Online (Sandbox Code Playgroud)

  • 也许使用`.get`来处理OP的"未知"案例? (2认同)