Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组的Pythonic映射(初学者)_Python_Arrays - Fatal编程技术网

数组的Pythonic映射(初学者)

数组的Pythonic映射(初学者),python,arrays,Python,Arrays,我有一个问题与我为介绍Python语言而编写的一个初级Python代码片段有关。诚然,这是一个微不足道的早期努力,但我仍然想知道我怎么能把它写得更优雅 程序输出参数的可读版本,例如“H2O”->“Hotel 2 Oscar”,或者(缺少参数)只输出整个字母表。我主要使用它来呼叫MAC地址和IQN,但它对其他电话支持也很有用 以下是该计划相关部分的正文: #!/usr/bin/env python import sys nato = { "a": 'Alfa', "b": 'Bravo', "

我有一个问题与我为介绍Python语言而编写的一个初级Python代码片段有关。诚然,这是一个微不足道的早期努力,但我仍然想知道我怎么能把它写得更优雅

程序输出参数的可读版本,例如“H2O”->“Hotel 2 Oscar”,或者(缺少参数)只输出整个字母表。我主要使用它来呼叫MAC地址和IQN,但它对其他电话支持也很有用

以下是该计划相关部分的正文:

#!/usr/bin/env python

import sys

nato = {
"a": 'Alfa',
"b": 'Bravo',
"c": 'Charlie',
"d": 'Delta',
"e": 'Echo',
"f": 'Foxtrot',
"g": 'Golf',
"h": 'Hotel',
"i": 'India',
"j": 'Juliet',
"k": 'Kilo',
"l": 'Lima',
"m": 'Mike',
"n": 'November',
"o": 'Oscar',
"p": 'Papa',
"q": 'Quebec',
"r": 'Romeo',
"s": 'Sierra',
"t": 'Tango',
"u": 'Uniform',
"v": 'Victor',
"w": 'Whiskey',
"x": 'Xray',
"y": 'Yankee',
"z": 'Zulu',
}

if len(sys.argv) < 2:
    for n in nato.keys():
            print nato[n]
else:
    # if sys.argv[1] == "-i" # TODO
    for char in sys.argv[1].lower():
            if char in nato:
                    print nato[char],
            else: print char,
#/usr/bin/env python
导入系统
北约={
“a”:“阿尔法”,
“b”:“好极了”,
“c”:“查理”,
“d”:“Delta”,
“e”:“回声”,
“f”:“狐步舞”,
“g”:“高尔夫”,
“h”:“酒店”,
“i”:“印度”,
“j”:“朱丽叶”,
“k”:“千克”,
“l”:“利马”,
“m”:“迈克”,
“n”:“十一月”,
“o”:“奥斯卡”,
“p”:“爸爸”,
“q”:“魁北克”,
“r”:“罗密欧”,
“s”:“塞拉”,
“t”:“探戈”,
“u”:“统一”,
“v”:“胜利者”,
“w”:“威士忌”,
“x”:“x射线”,
“y”:“扬基”,
“z”:“祖鲁”,
}
如果len(系统argv)<2:
对于北约中的n.keys():
打印北约[n]
其他:
#如果sys.argv[1]=“-i”#TODO
对于sys.argv[1]中的字符,lower()
如果在北约:
打印北约[char],
其他:打印字符,
正如我所提到的,我只是想看到一些建议,以一种更优雅的方式来编写代码。 我的第一个猜测是对sys.argv[1]中的x使用
[nato[x],如果在nato中是x,则使用lower()
,但这不允许我输出任何非字母字符。 我的下一个猜测是使用
map
,但我无法格式化任何不受相同转角情况影响的lambda

有什么建议吗?也许是具有一流功能的东西?弄乱了阵列的内脏?
这似乎几乎可能是一个密码高尔夫问题,但我觉得我只是想得太多了:)

也许是口述

for char in sys.argv[1].lower():
  print nato.get(char, char) # try to get nato[char] otherwise return char
也许是口述

for char in sys.argv[1].lower():
  print nato.get(char, char) # try to get nato[char] otherwise return char

使用上述建议和生成器表达式在一行中完成所有操作

print ' '.join(nato.get(c,c) for c in sys.argv[1].lower())

使用上述建议和生成器表达式在一行中完成所有操作

print ' '.join(nato.get(c,c) for c in sys.argv[1].lower())

以下是一种构建列表的简洁方法:

import sys
import string

NATO = '''Alpha Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliet
Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform
Victor Whiskey X-Ray Yankee Zulu'''.split()

nato = dict(zip(string.lowercase,NATO))

if len(sys.argv) < 2:
    for n in nato:
        print n,nato[n]
else:
    for char in sys.argv[1].lower():
        print nato.get(char,char)
导入系统 导入字符串 北约=''阿尔法布拉沃查理三角洲回声狐步高尔夫酒店印度朱丽叶 基洛利马麦克十一月奥斯卡爸爸魁北克罗密欧塞拉探戈制服 维克多威士忌X光扬基祖鲁“'.split() nato=dict(zip(字符串,小写,nato)) 如果len(系统argv)<2: 对于北约中的n: 印刷品,北约[n] 其他: 对于sys.argv[1]中的字符,lower() 打印nato.get(字符,字符)
以下是一种构建列表的简洁方法:

import sys
import string

NATO = '''Alpha Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliet
Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform
Victor Whiskey X-Ray Yankee Zulu'''.split()

nato = dict(zip(string.lowercase,NATO))

if len(sys.argv) < 2:
    for n in nato:
        print n,nato[n]
else:
    for char in sys.argv[1].lower():
        print nato.get(char,char)
导入系统 导入字符串 北约=''阿尔法布拉沃查理三角洲回声狐步高尔夫酒店印度朱丽叶 基洛利马麦克十一月奥斯卡爸爸魁北克罗密欧塞拉探戈制服 维克多威士忌X光扬基祖鲁“'.split() nato=dict(zip(字符串,小写,nato)) 如果len(系统argv)<2: 对于北约中的n: 印刷品,北约[n] 其他: 对于sys.argv[1]中的字符,lower() 打印nato.get(字符,字符)
在初始化北约dict的方式中,有一个隐含的要求,即北约字符串中的单词必须按字母顺序排列(我知道它们已经按字母顺序排列了)。我更喜欢类似于'nato=dict((单词[0].lower(),word)的东西来表示nato中的单词)。您的“sierra”也是小写的。在初始化北约dict的方式中,有一个隐含的要求,即北约字符串中的单词必须按字母顺序排列(我知道它们已经按字母顺序排列)。我更喜欢类似于'nato=dict((单词[0].lower(),word)的东西来表示nato中的单词)。您的“sierra”也是小写。