Вы в основном просто работаете задом наперед, поэтому для начала у вас есть:
код 1
{i: [np.random.randint(mins[t], maxs[t]) for t in range(len(mins))] for i in range(k)}
Итак, первый шаг - for i in range(k)
для генерации ключей, а затем что-то длясделайте с генерацией списка, или:
result = {}
for i in range(k):
temp = []
# something to do with making a list
result[i] = temp
Затем, снова работая в обратном направлении, вы получите for t in range(len(mins))
, оставив только np.random.randint(mins[t], maxs[t])
бит
Итак:
result = {}
for i in range(k):
temp = []
for t in range(len(mins)):
temp.append(np.random.randint(mins[t], maxs[t]))
result[i] = temp
В полном примере кода это будет
import numpy as np
mins = [1, 2, 3, 4]
maxs = [5, 6, 7, 8]
k = 3
test = []
test = {
i: [np.random.randint(mins[t], maxs[t]) for t in range(len(mins))] for i in range(k)
}
print(test)
result = {}
for i in range(k):
temp = []
for t in range(len(mins)):
temp.append(np.random.randint(mins[t], maxs[t]))
result[i] = temp
print(result)
Где первое - ваше понимание, а второе - для циклов.Результаты:
{0: [3, 3, 3, 4], 1: [2, 4, 3, 6], 2: [3, 2, 3, 5]}
{0: [4, 3, 4, 4], 1: [3, 3, 4, 4], 2: [3, 2, 6, 4]}
Вы можете видеть, что мы достигли тех же результатов, деконструируя понимание справа налево!
case 2
indices = [distances.index(row) for row in distances if row[-1] == c]
Может быть разложентак же.Начиная с самого последнего for
, мы находим:
for row in distances if row[-1] == c
, что соответствует:
for row in distances:
if row[-1] == c
#do something
Мы знаем, что все это заключено в список, поэтому добавление в список идобавление «чего-то» к нему довольно просто:
indices = []
for row in distances:
if row[-1] == c:
indices.append(distances.index(row))
Обратите внимание, что я не проверял это, хотя (и это также невозможно сделать с предоставленной информацией)
Еслимы помещаем это в оригинальный блок кода
for c in range(k):
indices = [distances.index(row) for row in distances if row[-1] == c]
test[c] = X.iloc[indices].mean().values
Теперь у нас есть
for c in range(k):
indices = []
for row in distances:
if row[-1] == c:
indices.append(distances.index(row))
test[c] = X.iloc[indices].mean().values