回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
让我考虑一下,我有一个列表如下:</P>
<pre><code>myList = [
'1000', 'ParameterName=Device type', 'ObjectType=0x7', 'DataType=0x7',
'AccessType=ro', 'PDOMapping=0', 'ObjFlags=1', 'ParameterValue=0x00020192',
'1001', 'ParameterName=Error register', 'ObjectType=0x7', 'DataType=0x5',
'AccessType=ro', 'PDOMapping=0', 'ObjFlags=1', 'ParameterValue=0x00',
'1003', 'SubNumber=6', 'ParameterName=Error history', 'ObjectType=0x8'
]
</code></pre>
<p>我的分割点将是<code>'1000'</code>、<code>'1001'</code>和<code>'1003'</code>,目标是</p>
<pre><code>listoflists = [
['1000', 'ParameterName=Device type', 'ObjectType=0x7', 'DataType=0x7',
'AccessType=ro', 'PDOMapping=0', 'ObjFlags=1', 'ParameterValue=0x00020192'],
['1001', 'ParameterName=Error register', 'ObjectType=0x7', 'DataType=0x5',
'AccessType=ro', 'PDOMapping=0', 'ObjFlags=1', 'ParameterValue=0x00'],
['1003', 'SubNumber=6', 'ParameterName=Error history', 'ObjectType=0x8']
]
</code></pre>
<p>我可以用一个简单的for循环轻松地完成它,如下所示</p>
<p>有一些额外的检查,因为我要求的名义情况下,但数字可以是一个十六进制(所以我使用<code>is_numeric</code>),也可以与一个不同的格式,如4digit+字符串(<code>1234sub2</code>),所以我切片的数据。最后一个检查是因为当我使用<code>is_digit</code>时,一些十六进制可以被视为数据,而它实际上是文本,但正如总是发生的那样,有一个<code>'DataThatMaybeIsConfusedAsHex = value'</code>我可以使用<code>'='</code>来区分</p>
<pre><code>for value in configurationFileList:
if is_numeric(value[:4]) and counter != 0 and "=" not in value:
# Append the list to the list of lists
configurationFileListForEachIndex.append(tmpList.copy())
# Clear the list
tmpList.clear()
# Append the New Index
tmpList.append(value)
else:
tmpList.append(value)
counter += 1
</code></pre>
<p>我想问一下,是否有任何“更漂亮”和更有效的方法来做到这一点</p>