如果存在多个争论,则将子列表分配给变量

时间:2016-11-13 16:14:44

标签: python string list python-3.x

所以这个项目我正在上学,我无法弄清楚如何让这段代码发挥作用。如果我输入两个单词它可以正常工作但如果我只输入一个然后它返回错误:

List index out of range. 

我需要它来分配变量" modifier"如果有两个单词但如果只有一个单词则忽略它。

有什么想法吗?

commandinp = [input("ROOT:/" + directory + "> ")]
commandfull = [x.strip().split(' ') for x in commandinp]
for sublist in commandfull:
    command = sublist[0]
    size = len(commandfull) 
    if size > 0:
        modifier = sublist[1]

1 个答案:

答案 0 :(得分:0)

不确定你为什么要在这里循环。如果您需要modifier可选的值,请使用partition

commands = input("ROOT:/" + directory + "> ").strip()
command, _, modifier = commands.partition(' ')
print(command, modifier)

使用' '进行分区会将字符串分为三部分;第一部分是第一个空格(command)之前的值,第二部分是分区元素(我们在这里使用_转储它),第三部分是空格后面的其余值({{ 1}})。

以下内容:

modifier

只需通过解包将值分区分配给相应的名称。

使用command, _, modifier = commands.partition(' ') sudo -s可获得以下值:

sudo

ROOT:/dir/> sudo
>>> command
'sudo'
>>> modifier
''

等等。

正如您所注意到的,我将原始片段略微修剪了一下; ROOT:/jim/> sudo -s >>> modifier '-s' >>> command 'sudo' 周围的括号是因为您之后正在进行input,我猜测。你真的不需要这样做,因为in将为你返回一个列表。

split循环似乎也是一个坏主意,你不需要对每个值做一些事情,你需要检查它的大小并适当地分配。对于那个for会这样做(即使if将我们从中拯救出来。)

如果肯定不希望partition定义,如果没有任何内容,你应该使用modified,但我认为,分配一个空字符串(评估为在if检查上False可能比有条件地定义它更好。