使用 if else 条件列出理解 - Python
List comprehension with if else conditions - Python
所以我一直在试图弄清楚如何将此代码中的主 for 循环转换为列表理解以提高效率,我看过一些示例,但 none 似乎可以满足对于这种情况。感谢您的帮助!
key = 'abcdefghij'
def getChunks(key):
''' Dividing the key into byte sized chunks'''
currVal = ''
remainder = ''
chunks = []
currVal = ''
for char in key:
if len(currVal) == 8:
chunks.append(currVal)
currVal = hex(ord(char))[2:]
else:
currVal += hex(ord(char))[2:]
if len(currVal) == 8:
chunks.append(currVal)
elif currVal:
remainder = currVal
return (chunks, remainder)
print(getChunks(key))
所需的输出将输入 string/key 分成字节大小的十六进制值块 + 以下格式的任何余数
>> (['61626364', '65666768'], '696a')
哦还有这个:
for i in range(1, self.hashCount+1):
h = hash(item, i) % self.bitArraySize # Generate Hash
# set the bit True in bit_array
self.bitArray[h] = True
for i in range(1, self.hashCount+1):
h = hash(item, i) % self.bitArraySize
if self.bitArray[h] == False:
return False
None 其中应该是列表理解。列表理解不应有副作用(它们是函数式编程构造,违反函数式编程预期会导致 unmaintainable/unreadable 代码)。在所有情况下,您的循环不 只是 按顺序逐个元素构建新的 list
,它们还在进行状态更改 and/or 构建 list
乱序。
旁注:if self.bitArray[h] == False:
是一种较慢的、非 Python 的拼写方式 if not self.bitArray[h]:
;根据 the PEP8 style guide:
,与 True
和 False
进行比较几乎总是错误的方法
Don't compare boolean values to True
or False
using ==
:
# Correct:
if greeting:
# Wrong:
if greeting == True:
对于问题 #1
key = 'abcdefghij'
def getChunks(key):
''' Dividing the key into byte sized chunks'''
hex_string = key.encode().hex()
length = len(hex_string)
sep = length%8
return [hex_string[i:i+8] for i in range(0, length-sep, 8)], hex_string[-sep:] if sep !=0 else ''
print(getChunks(key))
所以我一直在试图弄清楚如何将此代码中的主 for 循环转换为列表理解以提高效率,我看过一些示例,但 none 似乎可以满足对于这种情况。感谢您的帮助!
key = 'abcdefghij'
def getChunks(key):
''' Dividing the key into byte sized chunks'''
currVal = ''
remainder = ''
chunks = []
currVal = ''
for char in key:
if len(currVal) == 8:
chunks.append(currVal)
currVal = hex(ord(char))[2:]
else:
currVal += hex(ord(char))[2:]
if len(currVal) == 8:
chunks.append(currVal)
elif currVal:
remainder = currVal
return (chunks, remainder)
print(getChunks(key))
所需的输出将输入 string/key 分成字节大小的十六进制值块 + 以下格式的任何余数
>> (['61626364', '65666768'], '696a')
哦还有这个:
for i in range(1, self.hashCount+1):
h = hash(item, i) % self.bitArraySize # Generate Hash
# set the bit True in bit_array
self.bitArray[h] = True
for i in range(1, self.hashCount+1):
h = hash(item, i) % self.bitArraySize
if self.bitArray[h] == False:
return False
None 其中应该是列表理解。列表理解不应有副作用(它们是函数式编程构造,违反函数式编程预期会导致 unmaintainable/unreadable 代码)。在所有情况下,您的循环不 只是 按顺序逐个元素构建新的 list
,它们还在进行状态更改 and/or 构建 list
乱序。
旁注:if self.bitArray[h] == False:
是一种较慢的、非 Python 的拼写方式 if not self.bitArray[h]:
;根据 the PEP8 style guide:
True
和 False
进行比较几乎总是错误的方法
Don't compare boolean values to
True
orFalse
using==
:# Correct: if greeting: # Wrong: if greeting == True:
对于问题 #1
key = 'abcdefghij'
def getChunks(key):
''' Dividing the key into byte sized chunks'''
hex_string = key.encode().hex()
length = len(hex_string)
sep = length%8
return [hex_string[i:i+8] for i in range(0, length-sep, 8)], hex_string[-sep:] if sep !=0 else ''
print(getChunks(key))