我有一个我希望转换为十进制的八进制数列表。以下是我到目前为止所做的课程:
class Octal:
#Reads in the file into numberList, converting each line into an int.
def __init__(self):
list = []
file = open("Number Lists/random_numbers3.txt")
for line in file:
list.append(int(line))
self.numberList = list
file.close()
#Convert numberList to decimal
def dec_convert(self):
decimal = 0
decimalList = []
for line in self.numberList:
temp = str(line)
i = 0
while i < len(temp):
digit = int(temp[i])
item = (digit * (8 ** (len(temp) - i)))
decimal = decimal + item
i += 1
decimalList.append(decimal)
return decimalList
def get_list(self):
return self.numberList
我从文件中读取数字,这很好。但我不认为我的dec_convert()函数确实有效。它只是继续运行而没有完成。
它看起来非常糟糕且难以阅读,所以我想知道是否有更简单的方法将列表中的每个八进制数转换为十进制数?
答案 0 :(得分:1)
这是一个简单的解决方案,它使用内置的int()
构造函数而不是dec_convert()
函数。
class Octal:
def __init__(self):
with open("Number Lists/random_numbers3.txt") as fp:
self.numberList = map(lambda x:int(x,8), fp)
def get_list(self):
return self.numberList
if __name__=="__main__":
o = Octal()
print(o.get_list())
答案 1 :(得分:0)
是的,你可以使用 list comprehension :
def dec_convert(self):
decimalList = [self._convert_to_dec(line) for line in self.numberList]
和:
def _convert_to_dec(self,dec) :
n = len(temp)-1
return sum(int(x)*(8**(n-i)) for i,x in enumerate(dec))
第一个代码片段是一个简单的列表解析,它在self._convert_to_dec
。那里没那么神奇。
_convert_to_dec
更复杂:我们首先计算数字位数并将其存储在n
中。接下来,我们定义一个enumerate
在字符上的生成器,并将i
绑定到相应的索引。生成器将每个元素与相应的8
幂和数字相乘。这是一个生成器,因此不会构造真正的列表。
通过sum
运行此操作,我们获得了请求结果的总和。
或者如@TomKarzes所述,您可以将int
与给定的基数一起使用(在这种情况下为8
。