【问题标题】:Python create list from a other list [closed]Python从另一个列表创建列表[关闭]
【发布时间】:2021-12-18 12:06:16
【问题描述】:

我想在 python def 函数中编辑一个列表并返回一个新函数。在函数中,列表应该被排序并且一些列表项应该被替换。返回应该是一个新的列表!提前谢谢帮助..

我有一个 list1 = [a, d, b] d 应该替换为 c 并且应该对列表进行排序。新列表应该是[a, b, c]

【问题讨论】:

  • 请告诉我们你做了什么来解决它,你遇到了什么问题?
  • sorted(['c' if i == 'd' else i for i in ['a', 'd', 'b']])

标签: python python-3.x list user-defined-functions


【解决方案1】:

假设您的字母从第一个字母开始并按字母顺序排列,这应该可以:

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

def Correct(l):
    l.sort()
    i = letters.index(l[0])
    return letters[i:min(len(letters), i+len(l))]

并尝试一下:

test = ['a', 'd', 'b']
Correct(test)

这给出了:

['a', 'b', 'c']

编辑:

一些用户指出这只是针对这种特定情况。所以,这个解决方案应该可以工作:

def Swap(l, c):
    l.pop(1)
    l.append(c)
    return l

【讨论】:

  • 我认为您的解决方案不能满足问题的要求。例如,如果传递的列表是 test = ["b", "c", "e"],则您的函数将返回 ['b', 'c', 'd'];如果你有test = ["y", "d", "z"]Correct(test) 返回['d', 'e', 'f']。在特定情况下,它是偶然起作用的
  • @nikeros,OP 声明“应该对列表进行排序”,澄清您的查询,说明它不应该由第一个字符来判断,而是按字母顺序排列的最低字符。
  • @:arryTheLlama 提供的示例输入 list1 = [a, d, b] 未排序:据我了解,用户只想要 1) 用 cs 替换 ds 2) 具有排序的输出。如前所述,您的解决方案没有达到或更好,它在特定情况下确实如此,但逻辑有缺陷对我来说,老实说,用户认为它是做这项工作的人是可怕的。
  • @nikeros 你是对的。这绝对不是问题的答案。
【解决方案2】:

只需删除“d”,附加“c”并排序:

def edit_list(list1, old_letter, new_letter):
  list1.remove(old_letter)
  list1.append(new_letter)
  sorted(list1)
  return list1

输出:

>>>list1 = ['a', 'b', 'd']
>>>edit_list(list1, 'd', 'c')
['a', 'b', 'c']

【讨论】:

  • 谢谢!但我必须在带有参数的 def 函数中解决它:list1, old_letter, new_letter) 并且返回应该是一个新的 list2..
  • @RMJ7 我已经更新了我的解决方案。是你要找的吗?
  • 是的,你解决了我的问题。谢谢!!
【解决方案3】:

在更一般的设置中,如果您有一个重新映射字典,例如

m = {"d":"c",} # you can add as many mappings as you want

你可以达到你的结果如下:

new_list = sorted([m.get(k, k) for k in list1]) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    相关资源
    最近更新 更多