如何获取字符串中的最小值和最大值?

时间:2017-08-15 13:34:22

标签: python python-2.7

files = ['foo.0001.jpg', 'test2.0003.jpg', 'foo.0004.jpg', 'tmp.txt',
         'foo.0003.jpg', 'test2.0002.jpg', 'test2.0004.jpg', 'test.0002.jpg',
         'foo.0002.jpg', 'foo.0005.jpg', 'test.0001.jpg']

我想要foo。####。jpg和min,max print            测试。####。jpg和min,max print            test2。####。jpg and min,max print

def get_frame_number(files):
    for c in foo:
        value = files.get(c)
        for i in value:
            num = i.split(".")[1]
            num_list.append(int(num))
        print str(min(num_list)) + "-" + str(max(num_list))

我有一个功能。但无法理解。

4 个答案:

答案 0 :(得分:4)

您可以使用<?php //first.php session_start(); $_SESSION['name'] = 'New York'; ?> <?php //second.php session_start(); echo $_SESSION['name']; ?> 尝试从文件名中提取数字。然后将此函数分别用作rekey的{​​{1}}参数。

max

答案 1 :(得分:0)

一个选项是使用key arg(lambda函数)max()min()内置函数,如下所示:

for fn in ('foo', 'test', 'test2'):
    fn_max = max(
        (name for name in files if name.startswith('{}.'.format(fn))),
        key=lambda name: int(name.split('.')[1]))
    fn_min = min(
        (name for name in files if name.startswith('{}.'.format(fn))),
        key=lambda name: int(name.split('.')[1]))
    print(fn, fn_max, fn_min)

<强>输出:

('foo', 'foo.0005.jpg', 'foo.0001.jpg')
('test', 'test.0002.jpg', 'test.0001.jpg')
('test2', 'test2.0004.jpg', 'test2.0002.jpg')

答案 2 :(得分:0)

import re

foo = re.findall( r'(foo\.\d+.jpg)','|'.join( sorted(files) ) ) 
foo[0], foo[-1]

输出:

('foo.0001.jpg', 'foo.0005.jpg')

同样,您可以检查其他文件的最小值,最大值:

test = re.findall( r'(test\.\d+.jpg)','|'.join( sorted(files) ) )
test[0], test[-1]

test2 = re.findall( r'(test2\.\d+.jpg)','|'.join( sorted(files) ) )
test2[0], test2[-1]

将所有内容整合在一起:

[ ( i[0], i[-1] ) for i in [ re.findall( r'('+ j + '\.\d+.jpg)','|'.join( sorted(files) ) ) for j in ['foo','test','test2'] ] ]

输出:

[('foo.0001.jpg', 'foo.0005.jpg'),
 ('test.0001.jpg', 'test.0002.jpg'),
 ('test2.0002.jpg', 'test2.0004.jpg')]

答案 3 :(得分:-1)

def get_frame_number(files,name):
    nums = []
    for each in files:
        parts = each.strip().split('.')
        if parts[0] == name:nums.append(int(parts[1]))
        else:print("Ignoring",each)
    return(sorted(nums)[0],sorted(nums)[-1])

尝试使用:

print(get_frame_number(files,"test"))
print(get_frame_numbers(files,"test2"))
print(get_frame_numbers(files,"foo"))