如何简化Python中的列表处理?

mur*_*ray 3 python list

这是我的第一个Python程序,一个从Unix八进制代码转换为文件权限到符号形式的小实用程序:

s=raw_input("Octal?  ");
digits=[int(s[0]),int(s[1]),int(s[2])];
lookup=['','x','w','wx','r','rx','rw','rwx'];
uout='u='+lookup[digits[0]];
gout='g='+lookup[digits[1]];
oout='o='+lookup[digits[2]];
print(uout+','+gout+','+oout);
Run Code Online (Sandbox Code Playgroud)

有没有办法缩短利用某种"列表处理"的代码?例如,要将int函数一次性应用于所有三个字符,s而不必进行显式索引.并立即索引lookup使用整个列表digits

mgi*_*son 11

digits=[int(s[0]),int(s[1]),int(s[2])];
Run Code Online (Sandbox Code Playgroud)

可以写成:

digits = map(int,s)
Run Code Online (Sandbox Code Playgroud)

要么:

digits = [ int(x) for x in s ]  #list comprehension
Run Code Online (Sandbox Code Playgroud)

因为它看起来像你可能会使用python3.x(或在将来使用它根据你的函数样打印使用计划),你可能想,除非你想进一步挖掘和利用,以选择列表中,理解zip为通过后面的答案之一证明.

  • OP使用`raw_input`,因此它是2.X. (2认同)

Lev*_*sky 5

以下是代码的略微优化版本:

s = raw_input("Octal?  ")
digits = map(int, s)
lookup = ['','x','w','wx','r','rx','rw','rwx']
perms = [lookup[d] for d in digits]
rights = ['{}={}'.format(*x) for x in zip('ugo', perms)]
print ','.join(rights)
Run Code Online (Sandbox Code Playgroud)