python, file_list.sort()之后file_list 值会改变吗?
时间: 2024-03-14 16:45:58 浏览: 93
是的,会改变。`sort()` 方法会在原地对列表进行排序,也就是说,它会直接修改原列表,而不是返回一个新的已排序列表。如果你想对列表进行排序但不想修改原列表,可以使用 `sorted()` 函数,它会返回一个已排序的新列表。例如:
```
file_list = ['c.txt', 'a.txt', 'b.txt']
sorted_file_list = sorted(file_list)
print(sorted_file_list) # 输出 ['a.txt', 'b.txt', 'c.txt']
print(file_list) # 输出 ['c.txt', 'a.txt', 'b.txt']
```
相关问题
优化下面这段代码,要求尽可能的减少计算量,多采用pandas和numdy数据库来进行处理 import random filename = 'supercu.lmp' file_object = open(filename,'r') lines = file_object.readlines() num_layers = 150 num_atom_a_layer = 20000 idx_gradient = 0.1 num_random = [] for idx_layer in range(1,num_layers+1): num_cu_float = pow(idx_layer/num_layers,idx_gradient)*num_atom_a_layer num_cu = int(num_cu_float) list_random = random.sample(range((idx_layer-1)*num_atom_a_layer,idx_layer*num_atom_a_layer),num_cu) num_random = num_random + list_random num_random.sort() for index in range (len(lines)): strT = lines[index] strL = strT.split() if int(strL[0]) in num_random: strT = strT[:14]+'2'+strT[15:] lines[index] = strT file_object.close strTT = "".join(lines) file_object = open(filename,'w') file_object.write(strTT) file_object.close
这段代码可以通过以下方式进行优化:
1. 使用pandas库读取和处理文件,而不是使用Python内置的文件读取方式。
2. 使用numpy库中的random.choice()函数替换random.sample()函数,因为它更快。
3. 用pandas.DataFrame的loc[]方法,而不是循环遍历lines列表,以便更快地查找需要修改的行。
4. 通过使用join()方法,避免在每次循环中将字符串连接到一个字符串中。
以下是优化后的代码:
```
import pandas as pd
import numpy as np
filename = 'supercu.lmp'
# 读取文件
df = pd.read_csv(filename, sep='\s+', header=None, skiprows=9, names=['id', 'type', 'x', 'y', 'z'])
# 计算需要修改的行
num_layers = 150
num_atom_a_layer = 20000
idx_gradient = 0.1
num_random = []
for idx_layer in range(1,num_layers+1):
num_cu_float = pow(idx_layer/num_layers,idx_gradient)*num_atom_a_layer
num_cu = int(num_cu_float)
list_random = np.random.choice(range((idx_layer-1)*num_atom_a_layer,idx_layer*num_atom_a_layer),num_cu, replace=False)
num_random = np.concatenate((num_random, list_random))
num_random.sort()
# 修改需要修改的行
df.loc[df['id'].isin(num_random), 'type'] = 2
# 将修改后的DataFrame转换为字符串
strTT = df.to_csv(sep=' ', index=False, header=False)
# 写入文件
with open(filename, 'w') as f:
f.write(strTT)
```
这段代码在读取和处理文件时使用了pandas库,使用numpy库中的random.choice()函数,使用pandas.DataFrame的loc[]方法,以及使用join()方法来避免在每次循环中将字符串连接到一个字符串中。这些优化可以提高代码的性能和效率。
def sort(): # 成绩排序 show() # 显示学生信息列表 if os.path.exists(filename): with open(filename, 'r', encoding = 'UTF-8') as r_file: stu_list = r_file.readlines() stu_new = [] for i in stu_list: d = dict(eval(i)) stu_new.append(d) else: return asc_or_desc = input('请选择(0.升序 1.降序):') if asc_or_desc == '0': asc_or_desc_bool = False # 升序标记 elif asc_or_desc == '1': asc_or_desc_bool = True # 降序标记 else: print('输入错误!') m = input('请选择排序方式:(1.按英语成绩排序 2.按python成绩排序 3.按数学成绩排序 4.按数据结构成绩排序 0.按总成绩排序):') if m == '1': # 按英语成绩排序 stu_new.sort(key = lambda x:int(x['english']), reverse = asc_or_desc_bool) elif m == '2': # 按python成绩排序 stu_new.sort(key = lambda x:int(x['python']), reverse = asc_or_desc_bool) elif m == '3': # 按数学成绩排序 stu_new.sort(key = lambda x:int(x['math']), reverse = asc_or_desc_bool) elif m == '4': # 按数据结构成绩排序 stu_new.sort(key = lambda x:int(x['data']), reverse = asc_or_desc_bool) elif m == '0': # 按总成绩排序 stu_new.sort(key = lambda x:int(x['english']) + int(x['python']) + int(x['math']) + int(x['data']), reverse = asc_or_desc_bool) else: print("输入有误!") show_stu(stu_new)写出上面这段代码的伪代码
定义一个函数sort,没有输入参数
调用show函数,展示学生信息列表
如果文件存在,则打开文件
将文件内容按行读入到列表stu_list中
定义一个空列表stu_new
遍历stu_list中的每个元素i,使用eval函数将其转换为字典类型d
将d添加到stu_new列表中
否则返回
获取排序方式,升序或降序
如果输入不合法,则提示错误
获取排序方式,按照英语成绩、Python成绩、数学成绩、数据结构成绩或总成绩排序
如果输入不合法,则提示错误
根据所选的排序方式,对stu_new列表进行排序,使用lambda表达式指定排序方式和排序顺序
调用show_stu函数,展示排序后的stu_new列表
阅读全文