私信  •  关注

nikeros

nikeros 最近创建的主题
nikeros 最近回复了
4 年前
回复了 nikeros 创建的主题 » 如何生成一个环境。Python虚拟环境的yml文件?

你在寻找:

conda env export > environment.yml
4 年前
回复了 nikeros 创建的主题 » Python 3中的字典和循环。十、

我必须承认,我并不是100%清楚你想要实现什么——无论如何,这是我的尝试(使用最少的Python概念,并尽可能多地维护代码):

log = {
    'Alex': [3, 7, 11, 10, 8],
    'Ben': [6, 12, 4, 9, 9],
    'Carla': [5, 10, 7, 5, 9]}

for key, vs in log.items():
    log.update({key: [[min(vs)] + [max(vs)]]})

#log.update({"Alex":[min(log["Alex"])] + [max(log["Alex"])],
#            "Ben":[min(log["Ben"])] + [max(log["Ben"])],
#            "Carla":[min(log["Carla"])] + [max(log["Carla"])]})

current_max = 0
current_min = 100
best_student = "Unknown"
for name, vs in log.items():  # this retrieves key and value for each entry in the dictionary
    mx = vs[1] # why are you comparing the mix with the max of each student? Should this always be j[1]?
    mn = vs[0]
    if mx > current_max:
        current_max, current_min, best_student = mx, mn, name

print("Best student is " + best_student + " his top vote is " + str(current_max) + ". His lowest vote is " + str(current_min))

以下是一些评论:

  • 使用循环来运行日志更新更安全:如果您忘记手动运行1名学生的更新,您将遇到麻烦。循环“确保”这不会发生

  • 为什么,在运行日志字典更新时,会使用列表列表进行更新,其中第一个列表始终包含最小值,第二个列表始终包含最大值?你不能只使用一个简单的列表来更新,其中第一个元素是最小值,第二个元素是最大值吗?

    log.update({key: [min(vs), max(vs)]})
    
  • 我不明白为什么在你的循环中,你检查两个数字之间的最大值是多少(我指的是 m = max(vs[0]) 或 max(i, j) 在你的情况下)你在哪里 已经知道了 第一个是最小值,第二个是最大值。如果应用上一点中所述的更改,这将变成:

    m = vs[1] 
    

笔记 :我修改了代码,以便打印出最佳学生的最低投票数。 current_max 和 current_min 分别用低值和高值初始化,以便循环中的逻辑工作(如果两个数字超出可能的投票范围,第一个学生进程将立即更新这两个数字) 最大电流 和 当前_min ).你本来可以初始化 current_max=0 考虑到我认为在这个框架内的投票不能是负面的

4 年前
回复了 nikeros 创建的主题 » Python-将numpy数组中的值移动到底部

您可以遵循以下方法:

import numpy as np
import pandas as pd

arr = np.array([[0., 0., 0., 0., 0., 0.,0.],
 [2.,2.,2.,0.,2.,0.,0.],
 [1.,1.,1.,0.,1.,0.,0.],
 [2.,2.,2.,0.,2.,0.,0.],
 [1.,1.,2.,0.,2.,0.,0.],
 [2.,2.,0.,0.,0.,0.,0.],
 [1.,1.,0.,0.,0.,1.,0.]])
 
arr_t = np.array(list(zip(*arr)))
print(np.array(list(zip(*[np.concatenate([line[line == 0], line[line =! 0]]) for line in arr_t]))))

输出

[[0. 0. 0. 0. 0. 0. 0.]
 [2. 2. 0. 0. 0. 0. 0.]
 [1. 1. 0. 0. 0. 0. 0.]
 [2. 2. 2. 0. 2. 0. 0.]
 [1. 1. 1. 0. 1. 0. 0.]
 [2. 2. 2. 0. 2. 0. 0.]
 [1. 1. 2. 0. 2. 1. 0.]]

转置二维数组,为每一行构建一个数组,将0的数组连接到所有其他数字,最后重新转置

4 年前
回复了 nikeros 创建的主题 » 让python打印出我的csv中两个数字之间的行

你可以用 range :

df.iloc[range(row1, row2)]

如果你需要包括 row2 也:

df.iloc[range(row1, row2 + 1)]

无论如何,你都应该管理明显的异常(比如 row2 < row1 或 禁止进入 情况)。

禁止进入 情况可以这样处理:

df.iloc[range(max(0, row1), min(df.shape[0], row2+1))]

有 row2 <= row1 将返回一个空的 DataFrame 这可能是一个可接受的输出