改进将 ['abc'、'def'、'ghi'] 列表分隔为 ('abc'、['def'、'ghi']) 的功能?
Improve function of seperating lists of form ['abc', 'def', 'ghi'] into ('abc', ['def', 'ghi'])?
我有以下代码段将列表的第一个元素和其余元素分成两个变量:
test1 = [['p', '(q ∧ ¬(q))', '¬(p)'], ['p', '(¬(p) ∧ ¬(¬(p)))', '¬(p)']]
test2 = ['p', '(q ∧ ¬(q))', '¬(p)', 'q']
def seperate(data, index=None):
if index == None:
head = data[0]
origin = data[1:]
else:
head = data[index][0]
origin = data[index][1:]
return (head, origin)
print(seperate(test1,0))
print(seperate(test2))
print(seperate(test1,1))
输出:
('p', ['(q ∧ ¬(q))', '¬(p)'])
('p', ['(q ∧ ¬(q))', '¬(p)', 'q'])
('p', ['(¬(p) ∧ ¬(¬(p)))', '¬(p)'])
这很好用。我的问题是功能的外观,例如通过 if else 语句。
原因在两个 if else 块中几乎完全相同。两个输入的尺寸略有不同。
我的问题是他们以这种方式优化代码的方法我只有一个分配 head = ...
和一个分配 origin = ...
您可以将其归结为:
def seperate(data, index=None):
return(data[0], data[1:]) if index == None else (data[index][0], data[index][1:])
这是获得相同行为的更简洁的方法:
def seperate(data, index=None):
list_to_split = data if index is None else data[index]
return (list_to_split[0], list_to_split[1:])
函数应该只做一件事,而不用担心同一件事的不同突变,尤其是当函数的调用者从中得到的好处很少时。对于来电者来说,这些有什么区别?
seperate(test1, 0)
seperate(test1[0])
基本没有。
该函数不应接受任何 index
参数,调用者只需确保传入 一个 列表而不是嵌套的列表列表。
我有以下代码段将列表的第一个元素和其余元素分成两个变量:
test1 = [['p', '(q ∧ ¬(q))', '¬(p)'], ['p', '(¬(p) ∧ ¬(¬(p)))', '¬(p)']]
test2 = ['p', '(q ∧ ¬(q))', '¬(p)', 'q']
def seperate(data, index=None):
if index == None:
head = data[0]
origin = data[1:]
else:
head = data[index][0]
origin = data[index][1:]
return (head, origin)
print(seperate(test1,0))
print(seperate(test2))
print(seperate(test1,1))
输出:
('p', ['(q ∧ ¬(q))', '¬(p)'])
('p', ['(q ∧ ¬(q))', '¬(p)', 'q'])
('p', ['(¬(p) ∧ ¬(¬(p)))', '¬(p)'])
这很好用。我的问题是功能的外观,例如通过 if else 语句。
原因在两个 if else 块中几乎完全相同。两个输入的尺寸略有不同。
我的问题是他们以这种方式优化代码的方法我只有一个分配 head = ...
和一个分配 origin = ...
您可以将其归结为:
def seperate(data, index=None):
return(data[0], data[1:]) if index == None else (data[index][0], data[index][1:])
这是获得相同行为的更简洁的方法:
def seperate(data, index=None):
list_to_split = data if index is None else data[index]
return (list_to_split[0], list_to_split[1:])
函数应该只做一件事,而不用担心同一件事的不同突变,尤其是当函数的调用者从中得到的好处很少时。对于来电者来说,这些有什么区别?
seperate(test1, 0)
seperate(test1[0])
基本没有。
该函数不应接受任何 index
参数,调用者只需确保传入 一个 列表而不是嵌套的列表列表。