如何在Python中将列表转换为set时保持列表中元素的顺序,以及如何在Python中实现`scanf()`?

如何在Python中将列表转换为set时保持列表中元素的顺序,以及如何在Python中实现`scanf()`?,python,python-3.x,Python,Python 3.x,其实我有两个问题: 转换为集合时,如何保持列表中元素的顺序? 例如,考虑以下内容: >集合([7,10,78,96,13,42,88,7,12,16]) {96,7,10,42,12,13,78,16,88} 订单在转换过程中丢失。如何维持秩序 当我们点击空格或输入而没有实际输入值时,如何在不出错的情况下获取输入 例如,如果代码如下:n=int(input())并且如果给定的输入只是,但下一行包含实际输入,那么如何等待直到获得有效输入 我的意思是,我希望像在C语言中那样。如果编写的代码类似于sc

其实我有两个问题:

  • 转换为集合时,如何保持列表中元素的顺序? 例如,考虑以下内容:
  • >集合([7,10,78,96,13,42,88,7,12,16])

    {96,7,10,42,12,13,78,16,88}

    订单在转换过程中丢失。如何维持秩序

  • 当我们点击空格或输入而没有实际输入值时,如何在不出错的情况下获取输入
  • 例如,如果代码如下:
    n=int(input())
    并且如果给定的输入只是
    ,但下一行包含实际输入,那么如何等待直到获得有效输入

    我的意思是,我希望像在
    C
    语言中那样。如果编写的代码类似于
    scanf(“%d”,&n)
    然后它将忽略所有空格并输入按键,并将获得实际输入。此外,还有另一个功能,如获取时间,如
    scanf(“%d:%d”,&h,&m)
    实际上允许将
    作为分隔两个不同输入的输入

    我尝试了两种不同的输入方式: 第一:

    n=int(输入()) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 n=int(输入()) ValueError:基数为10的int()的文本无效:“” 第二:

    >>> from sys import stdin
    >>> n = int(stdin.readline())
    
    Traceback (most recent call last):
      File "<pyshell#12>", line 1, in <module>
        n = int(stdin.readline())
    ValueError: invalid literal for int() with base 10: '\n'
    
    来自sys import stdin的
    >>
    >>>n=int(stdin.readline())
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    n=int(stdin.readline())
    ValueError:基数为10的int()的文本无效:'\n'
    

    唯一明显的区别是
    stdin
    捕获返回键,而
    input()
    仅将其捕获为空字符串。但它们都没有实现上述的
    scanf()
    函数。如何实现这一点?

    为了保持顺序,您不能使用
    对象。但您可以使用
    冻结集
    。冻结集只是Python集对象的一个不可变版本。 就是这样,

    >>> a = [1,2,3,4,5]
    >>> b = frozenset(a)
    >>> print(a)
    [1, 2, 3, 4, 5]
    >>> print(b)
    frozenset({1, 2, 3, 4, 5})
    
    对于您的第二个问题,我建议使用此代码。在给定整数之前,它不会从循环中断

    >>> while 1:
        try:
            x = int(input().strip())
            break
        except ValueError:
            pass
    
    string.strip()用于删除python字符串中的所有前导和尾随空格。不过,在没有string.strip()的情况下,它仍然可以工作。 但在给定整数之前,它不会考虑任何'\n'字符串值和循环

    >>> while 1:
        try:
            x = int(input().strip())
            break
        except ValueError:
            pass
    
    为了通过输入中的“:”字符分隔输入,只需使用
    string.split(“:”)
    。它返回一个带分隔值的字符串

    >>> a = "1:2:3"
    >>> b = a.split(":")
    >>> print(b)
    ['1', '2', '3']
    

    希望这有帮助。

    为了保持顺序,您不能使用
    对象。但您可以使用
    冻结集
    。冻结集只是Python集对象的一个不可变版本。 就是这样,

    >>> a = [1,2,3,4,5]
    >>> b = frozenset(a)
    >>> print(a)
    [1, 2, 3, 4, 5]
    >>> print(b)
    frozenset({1, 2, 3, 4, 5})
    
    对于您的第二个问题,我建议使用此代码。在给定整数之前,它不会从循环中断

    >>> while 1:
        try:
            x = int(input().strip())
            break
        except ValueError:
            pass
    
    string.strip()用于删除python字符串中的所有前导和尾随空格。不过,在没有string.strip()的情况下,它仍然可以工作。 但在给定整数之前,它不会考虑任何'\n'字符串值和循环

    >>> while 1:
        try:
            x = int(input().strip())
            break
        except ValueError:
            pass
    
    为了通过输入中的“:”字符分隔输入,只需使用
    string.split(“:”)
    。它返回一个带分隔值的字符串

    >>> a = "1:2:3"
    >>> b = a.split(":")
    >>> print(b)
    ['1', '2', '3']
    
    希望这有帮助。

    集合没有顺序(或索引)。假设要将列表转换为集合以删除重复项(并将其转换回列表而不进行排序),请将列表转换为NumPy数组以删除重复项

    >>> l = [2, 5, 10, 6, 3, 10, 5, 7]
    >>> l = np.array(l)    
    >>> unique_index = np.unique(l, return_index = True)[-1]
    >>> unique_l = [l[i] for i in sorted(unique_index)]
    >>> unique_l
    [2, 5, 10, 6, 3, 7]
    
    集合没有顺序(或索引)。假设要将列表转换为集合以删除重复项(并将其转换回列表而不进行排序),请将列表转换为NumPy数组以删除重复项

    >>> l = [2, 5, 10, 6, 3, 10, 5, 7]
    >>> l = np.array(l)    
    >>> unique_index = np.unique(l, return_index = True)[-1]
    >>> unique_l = [l[i] for i in sorted(unique_index)]
    >>> unique_l
    [2, 5, 10, 6, 3, 7]
    

    如果转换没有重复项的列表,它将保留顺序。但是如果它有重复项,它会删除它们,所以请尝试
    set(list(dict.fromkeys([1,2,3,1,5,6,2]))
    对于第二个问题,不要首先将其转换为
    int
    ,如果值为
    ,则继续输入,否则,将其转换为int如果您转换的列表没有重复项,它将保留顺序。但是如果它有重复项,它将删除它们,所以尝试
    set(list(dict.fromkeys([1,2,3,1,5,6,2]))
    对于第二个问题,不要首先将其转换为
    int
    ,如果值为
    ,则继续提供输入,如果值不是,则将其转换为int@AfiJaabb。我现在知道我在哪里犯了错误。在
    之外的部分中,第一部分再次添加了相同的行:
    x=int(input())
    ,假设它已经传递到下一行。再次感谢。非常感谢@AfiJaabb。我现在知道我在哪里犯了错误。在
    之外的部分中,第一部分再次添加了相同的行:
    x=int(input())
    ,假设它已经传递到下一行。再次感谢。