根据大小写对列表进行排序

Sorting a list based on upper and lower case

我有一个列表:

List1 = ['name','is','JOHN','My']

我想将代词附加为新列表中的第一项,最后附加名称。其他项目应该在中间,它们的位置可以改变。

到目前为止我已经写了:

my_list = ['name','is','JOHN','My']

new_list = []

for i in my_list:
  if i.isupper():
    my_list.remove(i)
  new_list.append(i)
print(new_list)

在这里,我无法检查一个项目是完全大写还是只有第一个字母大写。

我得到的输出:

['name','is','JOHN','My']

我想要的输出:

['My','name','is','JOHN']

或:

['My','is','name','JOHN']

编辑: 我看过 this post 但它没有回答我的问题。

这个怎么样:

s = ['name', 'is', 'JOHN', 'My']

pronoun = ''
name = ''
for i in s:
    if i.isupper():
        name = i
    if i.istitle():
        pronoun = i

result = [pronoun, s[0], s[1], name]

print(result)

i.isupper()会告诉你是不是全大写

要测试是否只有第一个字符是大写而其余字符是小写,您可以使用 i.istitle()

为了获得最终结果,您可以根据条件附加到不同的列表。

all_cap = []
init_cap = []
non_cap = []

for i in my_list:
    if i.isupper():
        all_cap.append(i)
    elif i.istitle():
        init_cap.append(i)
    else: 
        non_cap.append(i)

new_list = init_cap + non_cap + all_cap
print(new_list)

DEMO

请不要@我XD。试试这个。

my_list = ['name','is','JOHN','My']
            
new_list = ['']

for i in range(len(my_list)):
  if my_list[i][0].isupper() and my_list[i][1].islower():
    new_list[0] = my_list[i]
  elif my_list[i].islower():
    new_list.append(my_list[i])
  elif my_list[i].isupper():
      new_list.append(my_list[i])
    
print(new_list)