我有一系列包含整数的列表和一个包含多个字符串的嵌套列表。目标是将字符串连接成一个字符串。我用一个列表上的代码完成了这个。问题是当我尝试迭代一系列列表时出现错误:“TypeError:sequence item 0:expected string,int found。”我试图将整数更改为字符串,忽略整数项并将代码指向嵌套列表但没有成功。
系列示例:
[19497, ['83', 'CLM']]
[19498, ['80', 'COS', 'PAN', '83', 'CLM']]
[19505, ['79', 'MXE', 'MXN', 'MXS']]
[19507, ['83', 'CLM', 'ECU']]
[19509, ['79', 'MXG', 'MXS', 'MXT', '80', 'BLZ', 'GUA', 'HON', 'NIC']]
这适用于一个列表:
>>> q = [48, ['40', 'ASS', 'EHM', 'IND', 'NEP', 'WHM', '41', 'MYA']]
>>> q[1] = " ".join(q[1])
>>> q
[48, '40 ASS EHM IND NEP WHM 41 MYA']
这是我为迭代尝试的并获得类型错误。
def smush(q):
'''STILL IN PROGRESS: Trying to create single string in nested list.'''
for line in q:
q[1] = ' '.join(q[1])
return q
我觉得有一个简单的解决方案,我忽略了。建议?
感谢您提供的任何帮助。
答案 0 :(得分:1)
你真的很亲密:
def smush(lists):
for line in lists:
line[1] = ' '.join(line[1])
return lists # optional, since this modifies the list in-place
如果每个项目都是两个元素的列表,则应使用tuples代替,如下所示:
data = [
(19497, ['83', 'CLM']),
(19498, ['80', 'COS', 'PAN', '83', 'CLM']),
(19505, ['79', 'MXE', 'MXN', 'MXS']),
(19507, ['83', 'CLM', 'ECU']),
(19509, ['79', 'MXG', 'MXS', 'MXT', '80', 'BLZ', 'GUA', 'HON', 'NIC']),
]
dataInStringFormat = [(n, ''.join(l)) for n,l in data]
答案 1 :(得分:0)
以下是正常工作(没有任何错误处理):
lines = [
[19497, ['83', 'CLM']],
[19498, ['80', 'COS', 'PAN', '83', 'CLM']],
[19505, ['79', 'MXE', 'MXN', 'MXS']],
]
def smush(lines):
new_lines = []
for line in lines:
new_line = [line[0], ' '.join(line[-1])]
new_lines.append(new_line)
return new_lines
print smush(lines)
# [[19497, '83 CLM'], [19498, '80 COS PAN 83 CLM'], [19505, '79 MXE MXN MXS']]
答案 2 :(得分:0)
list comprehension将简洁地做你想做的事:
a = [[19497, ['83', 'CLM']],
[19498, ['80', 'COS', 'PAN', '83', 'CLM']],
[19505, ['79', 'MXE', 'MXN', 'MXS']],
[19507, ['83', 'CLM', 'ECU']],
[19509, ['79', 'MXG', 'MXS', 'MXT', '80', 'BLZ', 'GUA', 'HON', 'NIC']]]
def smush(q):
'''Implemented as a list comprehension.'''
return [[x[0], ' '.join(x[1])] for x in q]
因此假设a
被定义为上面的嵌套列表,那么当传递给smush
时它将返回:
In [1]: smush(a)
Out[1]:
[[19497, '83 CLM'],
[19498, '80 COS PAN 83 CLM'],
[19505, '79 MXE MXN MXS'],
[19507, '83 CLM ECU'],
[19509, '79 MXG MXS MXT 80 BLZ GUA HON NIC']]
如PEP 202中所述:
列表推导提供了一种更简洁的方法来创建列表 map()和filter()和/或嵌套循环的情况 目前正在使用。
答案 3 :(得分:-1)
我假设您有一个嵌套的列表列表,如下所示:
x = [[19497, ['83', 'CLM']],
[19498, ['80', 'COS', 'PAN', '83', 'CLM']],
[19505, ['79', 'MXE', 'MXN', 'MXS']],
[19507, ['83', 'CLM', 'ECU']],
[19509, ['79', 'MXG', 'MXS', 'MXT', '80', 'BLZ', 'GUA', 'HON', 'NIC']]]
在这种情况下,你需要像这样迭代它:
for li in x:
smush(li)
print(li)