Python 如何按字母顺序拆分列表?我需要筛选出一个包含范围的列表;a「;透过「;m";和范围“;";透过「;z";

Python 如何按字母顺序拆分列表?我需要筛选出一个包含范围的列表;a「;透过「;m";和范围“;";透过「;z";,python,string,list,Python,String,List,我有一个包含键值对的主列表,我想将其分为两个单独的列表。前半部分范围为A-M,后半部分范围为N-Z 尝试拆分的数据示例: Main_list = ['a 1', 'her 1', 'her 1', 'lately','mr 1', 'ornament 1', 'pleased 1', 'saturday 1', 'view 1', 'youth 1'] 数据拆分结果: list1 = ['a 1', 'her 1', 'her 1', 'lately','mr 1'

我有一个包含键值对的主列表,我想将其分为两个单独的列表。前半部分范围为A-M,后半部分范围为N-Z

尝试拆分的数据示例:

Main_list = ['a 1', 'her 1', 'her 1', 'lately','mr 1', 'ornament 1', 
             'pleased 1', 'saturday 1', 'view 1', 'youth 1']
数据拆分结果:

list1 = ['a 1', 'her 1', 'her 1', 'lately','mr 1']

list2 = ['ornament 1', 'pleased 1', 'saturday 1', 'view 1', 'youth 1']

你可以这样做

Main_list = ['a 1', 'her 1', 'her 1', 'lately','mr 1', 'ornament 1', 
             'november 3', 'pleased 1', 'saturday 1', 'view 1', 'youth 1']
list1,list2 = [],[]
for i in Main_list:
    if i[0].lower() <'n':
        list1.append(i)
    else:
        list2.append(i)

print (list1)
print (list2)
我想提醒你这个解决方案。如果字符串中的第一个字符不是字母(是数字或非字母字符),则列表中的值将错误。如果您希望我也解决这个问题,请告诉我,您可以使用
ord()
chr()
a
m
生成列表,并在列表理解中使用它们:

Main_list = ['a 1', 'her 1', 'her 1', 'lately','mr 1', 'ornament 1', 
             'pleased 1', 'saturday 1', 'view 1', 'youth 1']

a_to_m_chars = [chr(i) for i in range(ord('a'), ord('n'))]
list1 = [elt for elt in Main_list if elt[0].lower() in a_to_m_chars]
list2 = [elt for elt in Main_list if elt[0].lower() not in a_to_m_chars]
print(list1)
print(list2)

更新:您不需要创建新列表,但可以在列表理解中有条件地执行以下操作:

list1 = [elt for elt in Main_list if elt[0].lower() >= 'a' and elt[0].lower() <= 'm']
list2 = [elt for elt in Main_list if elt[0].lower() >= 'n' and elt[0].lower() <= 'z']

list1=[elt for elt for elt in Main_list if elt[0]。lower()>='a'和elt[0]。lower()='n'和elt[0]。lower()根据第一个字符的
ord

>>> list(filter(lambda entry :  ord('a') <= ord(entry.lower()[0]) <= ord('m'), l))
['a 1', 'her 1', 'her 1', 'lately 1', 'mr 1']

>>> list(filter(lambda entry :  ord('n') <= ord(entry.lower()[0]) <= ord('z'), l))
['ornament 1', 'pleased 1', 'saturday 1', 'view 1', 'youth 1']

>>>列表(筛选器(lambda条目:ord('a'))>列表(筛选器(lambda条目:ord('n'))如果“n”不在名单上,马塞洛应该保留在名单上mind@Axel你是什么意思?它正在使用
@Alex,请参阅更新的答案。我已经添加了一个带有n的字符串以及一个单词。今天我发现了一个新的python技巧,如果你想成功的话:
L=list1 if I[0]。lower()<'n'else list2;L.append(I)
你需要小心。如果字符串有大写字母,你会被定为Yes,更新它。
列表(filter(lambda))
很难看,没有冒犯的意思。用列表理解来代替。另外,你可以用
L
来代替。
[x代表x在L中如果ord('a')哦,实际上,你甚至不需要使用
ord()
[x代表L中的x,如果'a'
>>> list(filter(lambda entry :  ord('a') <= ord(entry.lower()[0]) <= ord('m'), l))
['a 1', 'her 1', 'her 1', 'lately 1', 'mr 1']

>>> list(filter(lambda entry :  ord('n') <= ord(entry.lower()[0]) <= ord('z'), l))
['ornament 1', 'pleased 1', 'saturday 1', 'view 1', 'youth 1']