【问题标题】:sorting in the order of lowercase first then uppercase then digits and sorting the digits to with the odd no first [closed]先按小写然后大写然后数字的顺序排序,然后将数字排序为奇数不优先[关闭]
【发布时间】:2021-02-01 17:22:40
【问题描述】:

我写的代码如下。有人能告诉我这里有什么问题吗,即使我得到了所需的输出?

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)

输入是Sorting1234。我的输出是ginortS1234。预期的输出是ginortS1324。我们也必须对数字进行排序,以便奇数先到,你能帮我简化这段代码吗

【问题讨论】:

  • 为什么预期的输出是“ginortS1324”而不是“ginortS1234”?
  • “即使我得到了所需的输出,这里的问题是什么” - 如何获得所需的输出?
  • @ScottHunter 所需的输出与实际输出有非常细微的不同。在我弄清楚之前,我不得不看几次。和 mkrieger1 一样,我对这个要求感到困惑。
  • @MarkRansom:但是 OP explicity 说“我得到了所需的输出”。
  • @ScottHunter 是的,OP 很困惑。现在没有实际意义,这个问题理所当然地结束了。

标签: python loops sorting nested extend


【解决方案1】:

我假设这是家庭作业或其他事情,您应该以某种方式或其他方式来做这件事吗?规格是什么?

如果有任何帮助,我还是会缩短你的代码

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))

【讨论】:

  • 这只是输入可能变化的文本案例之一
  • 哦,所以您的答案适用于该案例,但不适用于其他案例?这个有用吗?
  • 您建议的代码对于这个是正确的,但在其他代码上却失败了。这是黑客等级中的Ginorts排序问题我忘了提到我们需要对数字进行排序的问题的约束,以便奇数首先出现我通过检查奇数甚至感谢您帮助我简化的先生来做到这一点我的代码
猜你喜欢
  • 1970-01-01
  • 2020-09-03
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
相关资源
最近更新 更多