python 列表解析及二位数组

本文介绍了Python中使用列表解析生成二维数组的方法,并通过实例详细解释了如何利用列表解析实现矩阵的90度旋转,包括具体的实现代码及过程。

生成4*4 的矩阵 for i in [[x for x in range(1,5)] for x in range(1,5)]: print i [[x for x in range(1,5)] for x in range(1,5)] 可以理解为 [for x in range(1,5) [x for x in range(1,5)] ##=== [1,2,3,4] ###=========[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]

[[y for y in range(1,5)] for x in range(1,5)] 可以理解为 [for x in range(1,5) [y for y in range(1,5)] ] ##========[y,y,y,y] ###========[[y,y,y,y],[y,y,y,y],[y,y,y,y],[y,y,y,y]] ###========[[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]] 执行的过程为 参考 http://codingpy.com/article/python-list-comprehensions-explained-visually/

列表解析实现 二维数组及其旋转 90度旋转

a = [[x for x in range(1,10)] for x in range(1,10)]
def spin(list):
    n = len(a)
    for j in range(n-1):         ####执行对调 的 次数n-1
        for i in range(j,n):       ######  对调元素
            a[j][i],a[i][j] = a[i][j],a[j][i]
    for x in a:
        print x

旋转的代码思路(90度44数组) 正方形 画一条对角线(左上角点和右下角点的对角线),90度就是将所有元素以这条对角线为对称轴进行对调 第一次对调 就是将正方形的上边元素与左边元素对调 第二次对调 将上与左边线向内平行移动(各个元素都在相应的正方形的上与左边上) 第三次对调 继续第二次的步骤,如果发现所有的元素都已经在画的正方形上和左边上了,那么对调这行就结束(44 的数组需要三步,55需要4步。。。。会发现nn需要n-1步) 在实现4*4数组的元素对象时(所有的对调自己写一遍),我们会发现,对调过程中元素对应的列表的key(a[key1][key2])会根据 执行的次数发生变化.对调的循环 范围为range(j,n)j (range(n-1))为对调执行的次数(这里把执行完一次左上边上所有元素的对调作为一次)即对调执行的次数循环为range(n-1)

转载于:https://my.oschina.net/u/1775013/blog/783932

<think>我们面临的任务:将浮点数转换为ASCII码形式写入数组,并保留两位小数。 步骤分解: 1. 将浮点数格式化为保留两位小数的字符串。例如,3.14159 -> "3.14" 2. 将格式化后的字符串转换为ASCII码。注意:这里需要将字符串中的每个字符转换为对应的ASCII码。 3. 将转换后的ASCII码写入数组。 具体实现: 第一步:格式化浮点数 我们可以使用格式化字符串的方法,如:format()函数或者f-string(Python 3.6+)来保留两位小数。 例如:num = 3.14159; formatted = "{:.2f}".format(num) 或者 formatted = f"{num:.2f}" 第二步:将字符串转换为ASCII码 遍历字符串中的每个字符,使用ord()函数获取每个字符的ASCII值。 第三步:将这些ASCII值存入数组列表)。 示例: 输入浮点数:3.14 格式化字符串:"3.14" 转换为ASCII:字符'3' -> 51, '.' -> 46, '1' -> 49, '4' -> 52 数组:[51, 46, 49, 52] 注意:如果浮点数是负数,例如-3.14,则字符串为"-3.14",同样处理。 但是,这里有一个问题:我们保留两位小数后,如果小数部分恰好是0,比如3.0,那么格式化后可能是"3.00"。 因此,我们需要按照两位小数来格式化,所以结果字符串总是包含两位小数。 代码实现: 假设我们有一个浮点数列表,需要将每个浮点数都转换为对应的ASCII码列表,并存入一个大数组列表列表)? 还是说只转换一个浮点数?根据问题描述,我们只处理一个浮点数,但我们可以扩展为多个。 问题描述是:“我想将浮点数转换为ASCII码形式写入数组”,这里可能是一个浮点数,也可能是多个。 但问题没有明确,我们先按照一个浮点数处理,然后可以很容易扩展到多个。 单个浮点数转换函数: 步骤: 1. 格式化浮点数为字符串,保留两位小数。 2. 将字符串的每个字符转换为ASCII码,并存入一个列表。 3. 返回这个列表。 如果输入是多个浮点数,我们可以遍历每个浮点数,将每个浮点数转换得到的ASCII列表作为子列表存入一个总列表。 但是,问题要求是“写入数组”,这里数组可以理解为Python列表。 我们按照单个浮点数来写,然后可以很容易扩展到多个。 代码示例: 单个浮点数: def float_to_ascii(f): # 保留两位小数 s = "{:.2f}".format(f) ascii_list = [ord(c) for c in s] return ascii_list 多个浮点数: def floats_to_ascii(floats): result = [] for f in floats: s = "{:.2f}".format(f) ascii_list = [ord(c) for c in s] result.append(ascii_list) return result 注意:如果浮点数很大,比如123456.78,那么格式化后的字符串会变成"123456.78",这样每个字符都会转换,所以列表长度会变长。 另外,如果我们要将整个浮点数数组写入一个一维数组(而不是列表列表),那么我们可以将每个浮点数转换后的ASCII列表连接起来,但这样会混在一起。所以需要明确需求。 根据问题描述,我们只处理一个浮点数,所以先按单个处理。 但是,问题中提到了“写入数组”,可能是指将转换后的ASCII码放入一个数组中(一维数组)。所以,我们返回一个一维列表。 然而,如果用户有多个浮点数,并且希望每个浮点数转换后的ASCII序列独立(即二维数组),那么返回列表列表。 由于问题没有明确,我们先按照单个浮点数返回一维列表。 如果用户有多个浮点数,并且希望所有字符都放在一个一维数组中,那么我们可以: def floats_to_ascii_flat(floats): ascii_list = [] for f in floats: s = "{:.2f}".format(f) # 在每个浮点数的ASCII序列后面添加一个分隔符(比如空格)的ASCII码?或者不加 # 如果不加分隔符,那么多个浮点数转换后的字符串会连在一起,例如[1.23, 4.56] -> "1.234.56",这样转换后就是[49,46,50,51,52,46,53,54](即"1.234.56") # 这样在解析时无法区分每个浮点数。 # 因此,通常我们会添加分隔符,比如逗号或空格。 # 但问题没有要求解析,所以我们可以不添加,或者根据用户需求添加。 # 由于问题没有明确,我们这里不添加分隔符,直接连接。 ascii_list.extend([ord(c) for c in s]) return ascii_list 但是,如果用户希望每个浮点数独立,那么应该返回二维数组。 由于问题描述是“写入数组”,没有明确是一维还是二维,且问题中只提到一个浮点数(“将浮点数”),所以我们先按一个浮点数处理。 因此,我们写一个函数,输入一个浮点数,输出一个整数列表(ASCII码)。 示例运行: 输入:3.14 输出:[51, 46, 49, 52] # 注意:字符串是"3.14",所以四个字符 但是,我们也可以考虑将负号也转换,例如-3.14 -> 字符串"-3.14" -> 45,51,46,49,52 现在,我们写一个完整的例子。 另外,注意格式化浮点数时,如果整数部分很大,那么字符串会包含多位整数,例如12345.67 -> "12345.67",所以转换后的列表长度会变化。 最后,我们还需要考虑浮点数的舍入问题,Python的格式化会四舍五入。 例如:3.145 -> 格式化两位小数会变成3.15(四舍五入)。 所以,我们按照这个规则。 代码实现: 单个浮点数转换: def float_to_ascii(f): # 保留两位小数,四舍五入 s = "{:.2f}".format(f) return [ord(c) for c in s] 测试: print(float_to_ascii(3.14159)) # 预期 [51, 46, 49, 52]? 但是3.14159格式化后是"3.14"吗?不,3.14159保留两位小数是3.14(第三位是1,小于5,所以舍去)?不对,3.14159保留两位小数:看第三位是1,所以是3.14,但第四位是5,所以实际上第三位后面的要四舍五入,但第三位是1,后面是5,那么第三位变成2?不对,我们保留两位小数,所以看第三位小数,如果第三位>=5,则第二位进1,否则舍去。 3.14159 -> 第三位是1,所以不进位,所以是3.14。 3.145 -> 第三位是5,则第二位4进1变成5,所以是3.15。 因此,我们的格式化符合要求。 但是,注意负数的格式化:例如-3.14159 -> 字符串是"-3.14" 所以,函数可以处理负数。 现在,如果用户有多个浮点数,我们可以这样处理: # 输入一个浮点数列表,返回一个二维列表,每个子列表是一个浮点数的ASCII码列表 def floats_to_ascii_list(floats): return [float_to_ascii(f) for f in floats] # 或者返回一个一维列表(将所有浮点数的ASCII码连接在一起,没有分隔符) def floats_to_ascii_flat(floats): result = [] for f in floats: result.extend(float_to_ascii(f)) return result 根据用户需求,我们提供单个浮点数的转换,并说明如何扩展到多个。 因此,我们编写代码: 假设用户输入一个浮点数,然后我们转换。 但是,用户的问题中并没有明确说明是一个还是多个,所以我们在回答中说明。 最后,回答结构: 1. 解释思路 2. 给出代码 3. 测试示例 4. 说明如何扩展到多个浮点数 另外,注意引用:我们在回答中引用相关的函数说明(如format和ord)的引用,但用户提供的引用中已经包含了这些内容,我们可以引用。 引用说明: 引用[1]中提到了保留小数点后两位的方法:"{:.2f}".format() 引用[3]中提到了ord()函数:将一个字符转换为它的ASCII整数值。 因此,我们在回答中引用这两条。 回答: 根据您的要求,将浮点数转换为ASCII码并保留两位小数的步骤如下: 1. 使用字符串格式化将浮点数保留两位小数,得到字符串。 2. 遍历字符串中的每个字符,使用`ord()`函数获取其ASCII码值。 3. 将每个字符的ASCII码值存入列表。 以下是实现代码: ```python def float_to_ascii(f): # 格式化为保留两位小数的字符串 s = "{:.2f}".format(f) # 将字符串的每个字符转换为ASCII码 ascii_list = [ord(c) for c in s] return ascii_list # 示例 num = 3.14159 ascii_array = float_to_ascii(num) print(ascii_array) # 输出: [51, 46, 49, 52] (因为字符串是"3.14") ``` 注意:如果浮点数为负数,例如`-3.14`,函数也能正确处理,因为格式化后的字符串为`"-3.14"`。 如果需要处理多个浮点数,可以扩展为以下函数: 返回一个二维列表,每个元素是一个浮点数对应的ASCII码列表: ```python def floats_to_ascii_list(floats): return [float_to_ascii(f) for f in floats] ``` 或者,返回一个一维列表(将所有浮点数的ASCII码连接在一起): ```python def floats_to_ascii_flat(floats): result = [] for f in floats: result.extend(float_to_ascii(f)) return result ``` 在连接成一维列表时,请注意,这样转换后所有浮点数的ASCII码会连在一起,中间没有分隔符。如果需要分隔符,可以在每个浮点数的ASCII码列表后添加一个分隔符的ASCII码(如空格,ASCII码为32),例如: ```python def floats_to_ascii_with_separator(floats, sep=32): result = [] for i, f in enumerate(floats): # 如果不是第一个元素,则在前面加一个分隔符 if i > 0: result.append(sep) result.extend(float_to_ascii(f)) return result ``` 以上代码实现了您的需求,使用了字符串格式化保留两位小数[^1]和字符到ASCII码的转换[^3]。 测试其他情况: ```python # 测试负数 print(float_to_ascii(-3.14)) # 输出: [45, 51, 46, 49, 52] # 测试整数部分较大 print(float_to_ascii(12345.67)) # 输出: [49, 50, 51, 52, 53, 46, 54, 55] # 测试刚好两位小数,但第三位为5(四舍五入) print(float_to_ascii(3.145)) # 输出: [51, 46, 49, 53] 因为3.145保留两位小数四舍五入为3.15 ``` 希望这能解决您的问题。 相关问题: 1. 在Python中如何将ASCII码列表转换回浮点数? 2. 如何将浮点数数组以二进制形式写入文件? 3. 除了保留两位小数,如何自定义格式化浮点数(如科学计数法)?</think>### Python浮点数转ASCII并保留两位小数 要实现将浮点数转换为ASCII形式并保留两位小数后写入数组,请按照以下步骤操作: #### 解决方案 ```python def float_to_ascii_array(f): """将浮点数转换为ASCII码数组,保留两位小数""" # 1. 保留两位小数并转换为字符串 formatted = "{:.2f}".format(f) # 2. 将每个字符转换为ASCII码 ascii_array = [ord(char) for char in formatted] return ascii_array # 示例使用 number = 3.1415926 result = float_to_ascii_array(number) print("浮点数:", number) print("ASCII数组:", result) # 输出: [51, 46, 49, 52] ``` #### 关键步骤解析: 1. **格式化浮点数** 使用`"{:.2f}".format()`或`f"{number:.2f}"`保留两位小数[^1]: ```python formatted = "{:.2f}".format(3.1415926) # 得到"3.14" ``` 2. **字符转ASCII码** 使用`ord()`函数获取每个字符的ASCII值[^3]: ```python [ord('3'), ord('.'), ord('1'), ord('4')] # 返回[51, 46, 49, 52] ``` 3. **处理特殊情况** - 负数:`float_to_ascii_array(-2.718)` → `[45, 50, 46, 55, 49]`(对应"-2.71") - 整数输入:`float_to_ascii_array(5)` → `[53, 46, 48, 48]`(对应"5.00") #### 扩展应用(批量转换) ```python numbers = [1.234, -5.678, 9.0] ascii_results = [float_to_ascii_array(n) for n in numbers] print("批量结果:", ascii_results) # 输出: [[49, 46, 50, 51], [45, 53, 46, 54, 55], [57, 46, 48, 48]] ``` #### 技术说明: 1. 格式化字符串`"{:.2f}"`确保四舍五入到两位小数 2. `ord()`函数将字符转换为对应的ASCII整数值[^3] 3. 最终结果是一个整数数组,可直接写入文件或传输 #### 注意事项: - 如需写入二进制文件,可追加`bytearray()`转换: ```python byte_data = bytearray(float_to_ascii_array(3.14)) ``` - 大数组处理建议分块操作以避免内存溢出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值