Komplexes Listenverständnis - Ein Liner
Posted: 23 Feb 2025, 10:12
Ich habe versucht, einen Einzeiler zu erstellen, um dies auszudrucken ("Die nicht perfekte Liste sicherer Zeichen für Dateinamen in den meisten Betriebssystemen"): < /p>
Die obige Ausgabe, die von Z.py erstellt wurde, enthält:
Wo ist das Problem mit dem einen Liner. Können Sie genau bestimmen, wie es geht?
Code: Select all
$ python ./z.py
+,-.
0123456789
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_
abcdefghijklmnopqrstuvwxyz{}~
< /code>
...But haben keinen Weg gefunden, dies zu tun; Musste stattdessen ein kurzes Skript erstellen < /p>
Mein letzter Ein-Liner-Versuch: < /p>
$ python -c "lst= [ [0x2b,0x2e+1],[0x30,0x39+1],[0x40,0x5f+1],[0x61,0x7f+1] ];print( [ chr(c) if (c & 0xdf)!=0x5c else '' for c in [ range(a,b) for a,b in [ li for li in lst ] ] ] )"
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for &: 'range' and 'int'
Code: Select all
#!/bin/env python
# copy of the one-liner
# python -c "lst= [ [0x2b,0x2e+1],[0x30,0x39+1],[0x40,0x5f+1],[0x61,0x7f+1] ];print( [ chr(c) if (c & 0xdf)!=0x5c else '' for c in [ range(a,b) for a,b in [ li for li in lst ] ] ] )"
# attempt to break down of the above
# python -c "lst= [ [0x2b,0x2e+1],[0x30,0x39+1],[0x40,0x5f+1],[0x61,0x7f+1] ];print(
# [ chr(c) if (c & 0xdf)!=0x5c else '' for c in
# [ range(a,b) for a,b in
# [ li for li in lst ]
# ]
# ]
# )"
# working code to create the output
lst= [ [0x2b,0x2e+1],[0x30,0x39+1],[0x40,0x5f+1],[0x61,0x7f+1] ]
for li in lst:
a,b=li
for c in range(a,b):
z=(c & 0xdf)
if z != 0x5c:
print(chr(c), end='')
print()