如何在Python3中映射两个不同长度的列表?

如何在Python3中映射两个不同长度的列表?,python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,我有两张单子 说 我想将这两个列表映射到一起以获得此输出: print(myMap) # [ ((1, a), (2, ab)), ((1, b), (2, cd)), (None, (2, ef)) ] 我得到这样的输出: 我知道我的问题在于这一行: myMap = (map(None, letterList, biGramList)) 我想这是因为Python 3。只是不太确定如何修复它并获得我想要的输出。使用: 请注意,使用它不一定需要强制列表,它只是方便打印。使用: 请注意,您不一定

我有两张单子

我想将这两个列表映射到一起以获得此输出:

print(myMap)
# [ ((1, a), (2, ab)), ((1, b), (2, cd)), (None, (2, ef)) ]
我得到这样的输出:

我知道我的问题在于这一行:

myMap = (map(None, letterList, biGramList))
我想这是因为Python 3。只是不太确定如何修复它并获得我想要的输出。

使用:

请注意,使用它不一定需要强制列表,它只是方便打印。

使用:


请注意,您不一定需要将其强制为列表来使用它,它只是便于打印。

如果不允许您导入外部模块,则这可能会有帮助:

result = list(zip(letterList,bigramList))
l1 = len(letterList)
l2 = len(bigramList)
if l1 > l2:
    result += [(item, None) for item in letterList[l2:]]
else:
    result += [(None, item) for item in bigramList[l1:]]
#[((1, 'a'), (2, 'ab')), ((1, 'b'), (2, 'cd')), (None, (2, 'ef'))]

如果不允许导入外部模块,则这可能有助于:

result = list(zip(letterList,bigramList))
l1 = len(letterList)
l2 = len(bigramList)
if l1 > l2:
    result += [(item, None) for item in letterList[l2:]]
else:
    result += [(None, item) for item in bigramList[l1:]]
#[((1, 'a'), (2, 'ab')), ((1, 'b'), (2, 'cd')), (None, (2, 'ef'))]

内联
if-else
可以工作,但这取决于从一开始就知道较短的列表

lst = [(1, 'a'), (1, 'b')]
bst = [(2, 'ab'), (2, 'cd'), (2, 'ef')]

[(lst[i] if i < len(lst) else None,
  bst[i])
 for i in range(len(bst))]

Out[30]: [((1, 'a'), (2, 'ab')), ((1, 'b'), (2, 'cd')), (None, (2, 'ef'))]
lst=[(1,'a'),(1,'b')]
bst=[(2,'ab'),(2,'cd'),(2,'ef')]
[(lst[i]如果我
实际上是一个“一行”列表理解,但有换行符,希望提高可读性

编辑:可以将其推广为对称处理输入

[(lst[i] if i < len(lst) else None,
  bst[i] if i < len(bst) else None)
 for i in range(max(len(lst), len(bst)))]
[(lst[i]如果i
inline
if-else
可以工作,但这取决于从一开始就知道较短的列表

lst = [(1, 'a'), (1, 'b')]
bst = [(2, 'ab'), (2, 'cd'), (2, 'ef')]

[(lst[i] if i < len(lst) else None,
  bst[i])
 for i in range(len(bst))]

Out[30]: [((1, 'a'), (2, 'ab')), ((1, 'b'), (2, 'cd')), (None, (2, 'ef'))]
lst=[(1,'a'),(1,'b')]
bst=[(2,'ab'),(2,'cd'),(2,'ef')]
[(lst[i]如果我
实际上是一个“一行”列表理解,但有换行符,希望提高可读性

编辑:可以将其推广为对称处理输入

[(lst[i] if i < len(lst) else None,
  bst[i] if i < len(bst) else None)
 for i in range(max(len(lst), len(bst)))]
[(lst[i]如果i
“…如何修复它并获得我想要的输出”-如果您向我们展示您想要的输出,这将非常有用。还有一个输入示例……如果您知道问题出在
myMap=(map(None,letterList,biGramList))
,则发布
letterList
biGramList
的示例值,不要发布其他所有内容。我们对不相关的代码不感兴趣。输入示例:google两个输出:格式显示时。。。[((LetterFreq1,Letter1),(BiGramFreq1,BiGram1)),((LetterFreq2,Letter2),(BiGramFreq2,BiGram2)),((,),(,,)等]此外,请删除所有不相关的代码(~95%您发布的代码),并提供一个
映射(无…
?老兄,这是个古老的成语。甚至在Python 2之前
zip
是自2.0以来更好的表达方式,如果您需要Python 3上的列表,
list(zip(…)
“…如何修复它并获得我想要的输出”-如果您向我们展示您想要的输出,这将非常有用。还有一个输入示例……如果您知道问题出在
myMap=(map(None,letterList,biGramList))
,则发布
letterList
biGramList
的示例值,不要发布其他所有内容。我们对不相关的代码不感兴趣。输入示例:google两个输出:格式显示时。。。[((LetterFreq1,Letter1),(BiGramFreq1,BiGram1)),((LetterFreq2,Letter2),(BiGramFreq2,BiGram2)),((,),(,,)等]此外,请删除所有不相关的代码(~95%您发布的代码),并提供一个
映射(无…
?老兄,这是个古老的成语。甚至在Python 2之前
zip
是自2.0以来更好的表达方式,如果您需要Python 3上的列表,
list(zip(…)
。除了正则表达式之外,我不允许为这个练习导入任何东西。@John编程的第一条法则是:忽略所有不正确的限制,因为你的老板总是比你笨。@o11c学习编程课程的第一条法则:不要忽视教授施加的限制。除了正则表达式之外,我不允许为这个练习导入任何东西。@John编程的第一条法则是:忽略所有不适当的限制,因为你的老板总是比你笨。@o11c学习编程课程的第一条法则:不要忽视教授施加的限制。