[英]Checking if two characters are equal to each other in python
我正在嘗試編寫一個程序,以在按字母順序排列的字母數組中查找丟失的字母。 恩。 [a,b,c,d,f]丟失=>'e'。
現在我有這個:
def find_missing_letter(chars):
# Creates variables of complete alphabet.
alphabetLower = list(string.ascii_lowercase)
enumeratedLower = []
alphabetUpper = list(string.ascii_uppercase)
enumeratedUpper = []
# Checks if the function has to enumerate the upper- or lowercase alphabet.
if(chars[0].islower()):
for c, value in enumerate(alphabetLower, 1):
enumeratedLower.append([c, value])
else:
for c, value in enumerate(alphabetUpper, 1):
enumeratedUpper.append([c, value])
# Checks at what letter the characters begin.
# After that it checks if the following letters are equal to eachother.
if(chars[0].isupper()):
for x in range(1, 26):
print enumeratedUpper[x][1]
print 'char:' + chars[0]
if(chars[0] == enumeratedUpper[x][1]):
for i in range(enumeratedUpper[x][0], len(chars)):
if(chars[i] != alphabetUpper[i]):
return alphabetUpper[i]
else:
for x in range(1, 26):
print enumeratedLower[x][1]
print 'char:' + chars[0]
if(chars[0] == enumeratedLower[x][1]):
for i in range(enumeratedLower[x][0], len(chars)):
if(chars[i] != alphabetLower[i]):
return alphabetLower[i]
但是,if語句
if(chars[0] == enumeratedUpper[x][1]):
和
if(chars[0] == enumeratedLower[x][1]):
由於某種原因無法正常工作。 該語句的原因是因為給定的字符(字符)數組可以以隨機字母開頭(不必以'a'或'A'開頭)。 我把打印語句放在那兒,看看有什么問題,輸出是這樣的:
b
char:o
c
char:o
d
char:o
e
char:o
f
char:o
g
char:o
h
char:o
i
char:o
j
char:o
k
char:o
l
char:o
m
char:o
n
char:o
o
char:o
p
char:o
q
char:o
r
char:o
s
char:o
t
char:o
u
char:o
v
char:o
w
char:o
x
char:o
y
char:o
z
char:o
您使事情變得有些復雜。 無需分別處理大寫和小寫字母。 另外,您不必使用enumerate
就可以使用index
方法來查找字符的開始位置。
import string
def find_missing_letter(chars):
# Creates variables of complete alphabet.
alphabet = string.ascii_lowercase if chars[0].islower() else string.ascii_uppercase
# Checks at what letter the characters begin
start = alphabet.index(chars[0])
# After that it checks if the following letters are equal to each other.
for x, y in zip(chars, aplhabet[start:]):
if x != y:
return y
樣本輸出:
>>> find_missing_letter('abcdf')
'e'
您的方法似乎太復雜了。 只需使用map
和ord
將chars列表轉換為nums列表,然后枚舉結果列表以查找第一個缺少的數字,然后使用chr
將其轉換回char
>>> l = ['a', 'b', 'c', 'd', 'f']
chr(next(i for i,j in enumerate(map(ord, l), ord(l[0])) if i!=j))
'e'
您可以使用生成器表達式搜索不在char中的字母,如果需要,請按字母順序對其進行排序
>>> chars = ['a', 'b', 'd', 'f']
>>> alphabet = string.ascii_lowercase if chars[0].islower() else string.ascii_uppercase
>>> sorted(letter for letter in alphabet if letter not in chars and letter > chars[0] and letter < chars[-1])
['c', 'e']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.