【问题标题】:Adding elements in set在集合中添加元素
【发布时间】:2022-12-18 09:00:07
【问题描述】:

数据 1:2

元素:3

添加后的排序集:['3', '2']

数据2:4

更新后的排序集:[['4'], '3', '2']

更新后显示排序集时,我希望输出类似于 更新后的排序集:[ 4, 3, 2]

data1 = input("data1: ").split(",")
element = input("element: ")
l1 = []

for i in data1:
    l1.append(i)

l1.insert(-1, element)
print("sorted set after adding:", l1)

data2 = input("data2: ").split(",")
l1.insert(0, data2)
print("sorted set after updating:", l1)

【问题讨论】:

  • data2 是一个列表。如果你想在l1的开头插入data2的元素,你应该使用slice-assigment l1[0:0] = data2而不是l1.insert(data2)
  • 将列表称为集合是不必要的混淆,因为集合是具有不同方法和语义的不同数据结构。
  • 在什么意义上 ['3', '2'] 是排序的?您不对列表进行排序(自然排序或反向排序),因此为了实现这一点,您必须扫描列表以找出根据其词法顺序插入值的位置 - 而您没有这样做

标签: python list set append updating


【解决方案1】:

您需要像对待data1 一样对待data2,并使用sort() 对您的列表进行排序:

data1=input("data1: ").split(",")
element=input("element: ")

l1=[]
for i in data1:
    # you should parse inputs to int
    l1.append(int(i))
    
l1.insert(-1,int(element))

# we sort the list
l1.sort(reverse=True)
print("sorted set after adding:",l1)

# add the second input like you did with the first one
data2=input("data2: ").split(",")
for i in data2:
    l1.append(int(i))

l1.sort(reverse=True)
print("sorted set after updating:",l1)

输出:

data1: 1,2,3
element: 5
sorted set after adding: [5, 3, 2, 1]
data2: 4
sorted set after updating: [5, 4, 3, 2, 1]

【讨论】:

    【解决方案2】:

    代码:-

    data1=input("data1: ").split(",")
    element=input("element: ")
    l1=[]
    for i in data1:
        l1.append(int(i))
    l1.insert(-1,int(element))
    l1=sorted(l1,reverse=True)
    print("sorted set after adding:",l1)
    data2=input("data2: ").split(",")
    for i in data2:
        l1.append(int(i))
    l1=sorted(l1,reverse=True)
    print("sorted set after updating:",l1)
    

    输出:- 你的测试用例:-

    data1: 2
    element: 3
    sorted set after adding: [3, 2]
    data2: 4
    sorted set after updating: [4, 3, 2]
    

    另一个测试用例:-

    data1: 3,5,1
    element: 4
    sorted set after adding: [5, 4, 3, 1]
    data2: 6,2,8
    sorted set after updating: [8, 6, 5, 4, 3, 2, 1]
    

    【讨论】:

    • 您从 data2=input("data2: ").split(",") 中删除了 .split(',')。我不确定假设 OP 不允许输入逗号分隔值是否安全。
    • 感谢您的反馈.. 也更新了另一个测试用例!!
    【解决方案3】:

    您使用 split() 方法获取第二个输入 data2,它返回一个输入列表,并将该列表添加到您的原始列表中。这就是为什么你有 [['4'], '3', '2']。尝试以下方式:

    data1=input("data1: ").split(",")
    element=input("element: ")
    l1=[]
    for i in data1:
      l1.append(i)
    l1.insert(-1,element)
    print("sorted set after adding:",l1)
    data2=input("data2: ")
    l1.insert(0,data2)
    print("sorted set after updating:",l1)
    

    在这里你可以使用Python basics

    【讨论】:

      【解决方案4】:

      根据您的代码,当您输入 ['3', '2'] 时,您的列表将是 l[0] = ['3' and l[1]= '2'],这就是为什么您会感到奇怪输出。

      解决该问题的一种方法是在将输入添加到列表中时解析数字输入。

      【讨论】: