我有以下样本数组:
arr = ["0001_xyz_01", "0001_xyz_02", "0001_xyz_03", "0002_xyz_01", "0002_xyz_02", "0002_xyz_03", "0003_xyz_01", "0003_xyz_02", "0003_xyz_03"]
从这个数组中,我想创建一个只包含以最高数字开头的字符串的新数组。所以新数组看起来像:
new_arr = ["0003_xyz_01", "0003_xyz_02", "0003_xyz_03"]
请注意:
new_arr
时,只应查看前4个字符 - 必须忽略字符串的其余部分。arr
中的项目顺序可能会发生变化。arr
中的项目数可能会发生变化。我想我可以使用filter
,但我不确定如何:
new_arr = filter(lambda x: <some-filtering-here>, arr)
答案 0 :(得分:1)
不是一个漂亮的解决方案,但你可以试试这个......
>>> new_arr = [x for x in arr if x.startswith(sorted([y[:4] for y in arr])[-1])]
['0003_xyz_01', '0003_xyz_02', '0003_xyz_03']
解释:
sorted([y[:4] for y in arr])[-1]
对每个字符串的前4个字符列表进行排序,并选择最高值。
[x for x in arr if x.startswith(...)]
是一个列表理解,选择以此最高值开头的字符串。
答案 1 :(得分:0)
我不知道是否有更多的Pythonic方法。但你可以分两步完成:
arr = ["0001_xyz_01", "0001_xyz_02" ...
highest = max([x.split('_')[0] for x in arr]
new_arr = [x for x in arr if x.startswith(highest)]
答案 2 :(得分:0)
>>> [t for t in arr if max(j[0] for j in [i.split('_') for i in arr]) in t]
['0003_xyz_01', '0003_xyz_02', '0003_xyz_03']
>>>
在下面的中,您可以单独看到所有代码片段的内容:
>>> [i.split('_') for i in arr]
[['0001', 'xyz', '01'], ['0001', 'xyz', '02'], ['0001', 'xyz', '03'], ['0002', 'xyz', '01'], ['0002', 'xyz', '02'], ['0002', 'xyz', '03'], ['0003', 'xyz', '01'], ['0003', 'xyz', '02'], ['0003', 'xyz', '03']]
>>> [j[0] for j in [i.split('_') for i in arr]]
['0001', '0001', '0001', '0002', '0002', '0002', '0003', '0003', '0003']
>>> [max(j[0] for j in [i.split('_') for i in arr])]
['0003']