Python算法面试——ACM输入输出总结

单行输入

1. 单个输入

# 输入为: 1 
a = int(input()) # 单个转换
# a = 1

2. 列表数组输入,转为数字列表

# 输入为: 1 2 3 4 5
a = input()
# a = '1 2 3 4 5'

b = [int(i) for i in input().split()] # 当然可以一步倒位
# 使用列表进行批量转换 b = [1, 2, 3, 4, 5]

# 使用map进行并行转换
e = map(int, input().split()) # 此时e是一个map迭代器,不能赋值,也不能索引
f = list(e) # 转换为列表,e = [1, 2, 3, 4, 5]
g = list(map(int, input().split())) # 一步到位

多行输入

1. 多行输入,同时未指定用例的个数

"""
输入包括两个正整数a,b(1 <= a, b <= 1000),输入数据包括多组。
如输入
1 5
10 20
"""
while True:
	try:
	  data = input()
	  fun(data) # 目标函数
	except:
	  break

2. 多行输入, 指定用例个数

"""
输入第一行包括一个数据组数t(1 <= t <= 100)  
接下来每行包括两个正整数a,b(1 <= a, b <= 1000)
如输入
2
1 5
10 20
"""
n = int(input()) 获取用例个数
for _ in range(n):
	data = input()
	fun(data) # 核心函数

3. 多行输入,指定某个条件退出


"""
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入
如输入
1 5
10 20
0 0
"""
while True:
	data = input()
	if judge(data): # 判断是不是0
	  break
	fun(data)

链表输入输出

# 定义链表结构
class ListNode:
    def __init__(self,val,next=None):
        self.val = val
        self.next = next

# 数组转链表
def nums2ListNode(nums):
    dummy = ListNode(None)
    root = ListNode(nums[0])
    dummy.next = root
    i = 1
    while i < len(nums):
        node = ListNode(nums[i])
        root.next = node
        root = root.next
        i += 1
	root.next = None
    return dummy.next

# 打印链表
nums = [1,2,3,4,5]
root = nums2ListNode(nums)
while root:
    print(root.val)
    root = root.next

二叉树的输入输出

4.1 完全二叉树格式输入

# 中序遍历
def inorder_traversal(nums, index):
    if index >= len(nums) or nums[index] == -1:
        return
    left, right = 2 * index + 1, 2 * index + 2
    inorder_traversal(nums, left)
    print(nums[index], end = ' ')
    inorder_traversal(nums, right)

# 输入为 1 2 3 null 4 null 5
#      1
#    /   \
#   2     3
#    \     \
#     4     5
if __name__ == "__main__":
    nums = input().split()
    nums = [int(num) if num != 'null' else -1 for num in nums]
    inorder_traversal(nums, 0)

    # output: 2 4 1 3 5
物联沃分享整理
物联沃-IOTWORD物联网 » Python算法面试——ACM输入输出总结

发表评论