Добавляя к ответ Грега Бука (потому что я только что искал это), если вы хотите использовать это из Linq, вы можете использовать OrderBy
, который принимает IComparer
. Например ::
var items = new List();
// fill items
var sorted = items.OrderBy(item => item.Name, new NaturalStringComparer());
Для new_sample.txt :
ranges: [1.3,1.9,2.05,inf,1.64]
вы можете разделить данные с разделителем пробелом и "," :
f = open("new_sample.txt", "r")
file = f.read().splitlines()
f.close()
result = []
for i in file:
b = i.split(" ")
if b[0] == "ranges:":
temp = b[1][1:-1].split(",")
for j in temp:
if j not in ["inf"]:
result.append(j)
print(result)
OUTPUT: ['1.3', '1.9', '2.05', '1.64']
Если вы прочитали строки файла и можете получить список,
, как
ranges_in_file = [1.3,1.9,2.05,math.inf,1.64]
, вы можете понять, что вам нужно / не нужно :
wanted = [x for x in ranges_in_file if x not in [math.inf, "range"] ]
Если ваши строки всегда выглядят так, поэтому начинайте с "ranges: "
, за которым следует список значений, и единственное, что вы хотите удалить - inf
, вы можете легко превратить его в список с плавающей точкой, Функция map
выглядит следующим образом:
line = "ranges: [1.3,1.9,2.05,inf,1.64]"
values = list(map(float, [x.strip('[]') for x in (line.split(' ')[1]).split(',') if 'inf' not in x]))
Вывод:
[1.3, 1.9, 2.05, 1.64] # list of float values
Затем вы можете применить это к каждой строке файла, которая начинается с 'ranges:'
, что даст вам список отдельных строк значений списков. Обратите внимание на использование with open(...
, которое в целом безопаснее использовать для файлов, поскольку файл всегда будет правильно закрыт, независимо от того, что произойдет.
values = []
with open('new_sample.txt', 'r') as f:
for line in f.readlines():
if line.startswith('ranges:'):
line_values = list(map(float, [x.strip #.... and so on, see above
values.append(line_values)
Но если ваши строки могут отличаться, необходим более общий подход.
Вы можете разделить переменную ranges
и список, используя a,b=ranges_in_file.split('=')
b.strip()
. Таким образом, b содержит требуемый список в виде строки. Используйте c=list(b[1:len(b)-1].split(','))
, чтобы преобразовать его в список. Затем вы можете перебирать список и отбрасывать любые значения, которые вам не нужны. (Помните, что все записи в списке являются строками!)