2017-07-24 28 views
0

我需要把用户的输入像列表:在Python中输入多于1个列表的最佳方法是什么?

11 20 
22 30 
32 45 
34 54 
.. .. 

我想:

for i in range(n): 
    c, d = map(int, input().split()) 
    a.append(c) 
    b.append(d) 

是否有比这更好的办法?

+1

你需要输入格式与您指定的方式完全相同?这种做法有什么问题? – Thundzz

+0

你可以直接通过'[map(int,input().span())作为范围(n)]中的_'来追加,但就是这样。我建议强烈反对,因为每个不包含由空格分隔的整数列表的条目都会破坏它。一些基本的'input()'验证总是一个好主意。 – zwer

+1

只要你抓住ValueError并提醒用户你期望输入的格式,这实际上是一个体面的方式来做到这一点。 –

回答

0

这可能是你想要什么:

ins = [input("Two integers separated by a whitespace: ") for _ in range(n)] 
a, b = [int(i.split()[0]) for i in ins], [int(i.split()[1]) for i in ins] 

考虑例外,我觉得代码下面是更好的:

tip = "Enter two integers separated by a whitespace: "  
while n > 0: 
    try: 
     c, d = map(int, input(tip).split()) 
     n -= 1 
     a.append(c) 
     b.append(d) 
    except: 
     print('invalid input!\n') 
+0

第一个是令人难以置信的浪费 - 两个分裂在相同的数据来挑选双方 - 你可以做一个单一的拆分和解压缩,如果你想要一个班轮。 – zwer

0

只需要一些用户提示和验证。只要抓住ValueError异常会做到这一点...

for i in range(n): 
    while True: 
     try: 
      c, d = map(int, input("enter 2 numbers separated by whitespace").split()) 
      break 
     except ValueError: 
      print("Try again...\n") 
    a.append(c) 
    b.append(d) 

结果解释:

>>> n = 10 
>>> a = [] 
>>> b = [] 
>>> for i in range(n): 
     while True: 
      try: 
       c, d = map(int, input("enter 2 numbers separated by whitespace: ").split()) 
       break 
      except ValueError: 
       print("Try again...\n") 
     a.append(c) 
     b.append(d) 
... ... ... ... ... ... ... ... ... 
enter 2 numbers separated by whitespace: 1 2 
enter 2 numbers separated by whitespace: 5 
Try again... 

enter 2 numbers separated by whitespace: 5 6 
enter 2 numbers separated by whitespace: 10 11 
enter 2 numbers separated by whitespace: 3112 3232 
enter 2 numbers separated by whitespace: 1111 
Try again... 

enter 2 numbers separated by whitespace: 323 333 
enter 2 numbers separated by whitespace: 324 334 
enter 2 numbers separated by whitespace: 1 1 
enter 2 numbers separated by whitespace: 2 2 
enter 2 numbers separated by whitespace: 3 3 
enter 2 numbers separated by whitespace: 4 4 
>>> a 
[1, 5, 10, 3112, 323, 324, 1, 2, 3, 4] 
>>> b 
[2, 6, 11, 3232, 333, 334, 1, 2, 3, 4] 
>>> 
相关问题