Python 先按小写字母,再按大写字母,再按数字排序,先按奇数“否”将数字排序
下面给出了我编写的代码。有人能告诉我这里的问题是什么,即使我得到了所需的输出Python 先按小写字母,再按大写字母,再按数字排序,先按奇数“否”将数字排序,python,loops,sorting,nested,extend,Python,Loops,Sorting,Nested,Extend,下面给出了我编写的代码。有人能告诉我这里的问题是什么,即使我得到了所需的输出 p = list(input()) upper_case=[] lower_case=[] no=[] for i in p: if i.isalpha() and i.isupper(): upper_case.append(i) if i.isalpha() and i.islower(): lower_case.append(i) if i.isdigit(
p = list(input())
upper_case=[]
lower_case=[]
no=[]
for i in p:
if i.isalpha() and i.isupper():
upper_case.append(i)
if i.isalpha() and i.islower():
lower_case.append(i)
if i.isdigit():
no.append(i)
upper_case.sort()
lower_case.sort()
no.sort()
lower_case.extend(upper_case)
lower_case.extend(no)
output = "".join(lower_case)
print(output)
输入是排序1234。我的输出是ginortS1234。预期输出为ginortS1324。我们也必须对数字进行排序,以使奇数优先。你能帮我简化这段代码吗?我假设这是家庭作业什么的,你应该用某种方式来完成吗?规格是什么 我缩短了你的代码,如果这有帮助的话
p = "Sorting1234"
upper_case = sorted([i for i in p if i.isupper()])
lower_case = sorted([i for i in p if i.islower()])
no = sorted([i for i in p if i.isdigit()])
output = "".join(lower_case + upper_case + no)
print(output)
或者更好,这样您就不必多次排序:
p = "Sorting1234"
p = sorted(p)
output = [i for i in p if i.islower()] + \
[i for i in p if i.isupper()] + \
[i for i in p if i.isdigit()]
print("".join(output))
为什么预期的输出是ginortS1324而不是ginortS1234?即使我获得了所需的输出,这里的问题是什么?如何获得所需的输出是一个问题?@ScottHunter所需的输出与实际输出有着微妙的不同。我看了好几遍才弄明白。就像mkrieger1一样,我对这个要求感到困惑。@Markransem:但是OP明确地说我得到了所需的输出。@ScottHunter是的,OP非常困惑。现在,这个问题是值得结束的。这只是一个文本案例,输入可能会改变哦,所以你的答案适用于该案例,但不适用于其他案例?这一个有效吗?您建议的代码对这一个是正确的,但对其他代码无效。这是黑客等级中的Ginorts排序问题我忘了提到这个问题的一个约束条件我们也需要对数字进行排序,以使奇数优先我通过检查奇数或偶数来完成。谢谢你的帮助,先生,你帮助我简化了代码