В рамках аналогичной задачи мне также нужно было получить букву свободного диска. Я решил, что хочу самое высокое доступное письмо. Сначала я выписал это более идиоматически, а затем сжал до 1 строки, чтобы увидеть, все ли это имеет смысл. Так же, как и списки, я люблю наборы для этого: unused=set(alphabet)-set(used)
вместо того, чтобы делать unused = [a for a in aphabet if a not in used]
. Классные вещи!
def get_used_drive_letters():
drives = win32api.GetLogicalDriveStrings()
drives = drives.split('\000')[:-1]
letters = [d[0] for d in drives]
return letters
def get_unused_drive_letters():
alphabet = map(chr, range(ord('A'), ord('Z')+1))
used = get_used_drive_letters()
unused = list(set(alphabet)-set(used))
return unused
def get_highest_unused_drive_letter():
unused = get_unused_drive_letters()
highest = list(reversed(sorted(unused)))[0]
return highest
Один лайнер:
def get_drive():
highest = sorted(list(set(map(chr, range(ord('A'), ord('Z')+1))) -
set(win32api.GetLogicalDriveStrings().split(':\\\000')[:-1])))[-1]
Я также выбрал алфавит, используя map / range / ord / chr, вместо строки, так как части строки устарели.