【问题标题】:How do I combine one input to a list of another input in order?如何按顺序将一个输入组合到另一个输入的列表中?
【发布时间】:2022-11-24 15:44:30
【问题描述】:

假设我输入了:

john bob alex liam # names
15 17 16 19 # age
70 92 70 100 # iq

我如何才能让 john 被分配到 15 岁和 iq 为 70,bob 被分配到 17 岁和 iq 为 92,alex 被分配到 16 岁和 iq 为 70,liam 被分配到 19 岁和 iq 为100?

现在我有:

names = input().split()

从那里,我知道必须为 age 和 iq 再创建 2 个变量,并将它们也分配给输入,但是如何以相同的顺序将这些数字分配给名称?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    我们可以形成 3 个列表,然后将它们压缩在一起:

    names = "john bob alex liam"
    ages = "15 17 16 19"
    iq = "70 92 70 100"
    list_a = names.split()
    list_b = ages.split()
    list_c = iq.split()
    zipped = zip(list_a, list_b, list_c)
    zipped_list = list(zipped)  
    
    print(zipped_list)
    

    这打印:

    [('john', '15', '70'), ('bob', '17', '92'), ('alex', '16', '70'), ('liam', '19', '100')]
    

    【讨论】:

      【解决方案2】:

      什么是预期的输出?

      假设有一个字典,这是链接键的规范方式:值,您可以使用字典理解:

      text = '''john bob alex liam # names
      15 17 16 19 # age
      70 92 70 100 # iq'''
      
      d = {key: [age, iq] for key, age, iq in 
           zip(*(s.split() for s in 
                 (s.split(' #', 1)[0] for s in 
                  text.split('
      '))))}
      

      输出:

      {'john': ['15', '70'],
       'bob': ['17', '92'],
       'alex': ['16', '70'],
       'liam': ['19', '100']}
      

      注意。如果你想要整数,请使用key: [int(age), int(iq)]

      如果你想要元组:

      out = list(zip(*(s.split() for s in 
                       (s.split(' #', 1)[0] for s in text.split('
      ')))))
      

      输出:

      [('john', '15', '70'),
       ('bob', '17', '92'),
       ('alex', '16', '70'),
       ('liam', '19', '100')]
      

      【讨论】:

      • 好吧,这里没有预期的输出,但如果有意义的话,我将在我的程序的其余部分使用它来制作我需要发生的事情。
      • @YxC 好的,所以你现在有两个选择;)关键部分是使用zip。如果您必须使用名称进行索引,我建议使用字典,因为复杂度为O(1)。获取alex的智商:d['alex'][1]。
      • 多谢兄弟。顺便说一句 O(1) 是最快的吧?因为是的,我确实需要我的程序在一定的时间限制内运行,这真的很有帮助。
      【解决方案3】:

      只有当每种类型的数量相同(5 个名字、5 个年龄和 5 个智商)时,你才能将所有名字存储在一个列表中,将所有年龄存储在另一个列表中,将所有智商存储在另一个列表中。 然后,将names列表的第一个元素赋值给ages列表的第一个元素,然后赋给iqs列表的第一个元素,依此类推

      names = ["John", "Bob", "Alex", "Liam"]
      ages = [15, 17, 16, 19]
      iqs = [70, 92, 70, 100]
      

      然后,为了,例如,打印这个,你可以

      print(names[0], ages[0], iqs[0])
      

      【讨论】:

        猜你喜欢
        • 2020-08-14
        • 2016-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-12
        • 2019-02-19
        • 1970-01-01
        相关资源
        最近更新 更多