参考链接(第8条)
a = int(input()) # 得到单个整型数字
b = list(map(int,input().split())) # 得到数字元素列表
print(a,b) # 输出
n = int(input()) # 指定行数,输入多行数据(每个数占一行),返回一维list
lst = []
for i in range(n):
lst.append(int(input()))
# 得二维数组
res = []
n = int(input("请输入行数:"))
for i in range(n):
res.append(list(map(int, input('请输入,以空格分开:').split())))
print(res)
(1)控制台单个数字输入:
import sys
a = int(sys.stdin.readline().strip())
(2) 把这一行用空格分开的数字,变为列表:
b = list(map(int,sys.stdin.readline().strip().split()))
(3)指定行数 输入多行数据,返回一维或者二维list:
c = []
# 一维
for i in range(a):
cc = int(sys.stdin.readline().strip().split()) # 直接转换为数字就可
c.append(cc)
# 二维
for i in range(a):
cc = list(map(int,sys.stdin.readline().strip().split()))
c.append(cc)
print(c)
(4)不指定行数 输入多行数据, 返回二维list:
d = []
while true:
try:
dd = list(map(int,sys.stdin.readline().strip().split()))
if not dd: # 不断循环,直到得到的一行输入为空
break
d.append(dd)
except:
break
print(d)
4、关于3中关键语句分析
(1)关于input()输入、split()
>>> a = input() # 单个输入
43
>>> a
'43'
>>> type(a)
<class 'str'> # 返回是字符类型
>>> a = input().split() # 多次输入,用空格分开,回车结束
a b c d e
>>> a
['a', 'b', 'c', 'd', 'e'] # 返回元素为字符类型的列表
>>> type(a)
<class 'list'>
>>> trpe(a[0])
>>> a, b, c = input() # 不能对多个元素赋值,因为没有分割开
1 2 3
Traceback (most recent call last):
File "" , line 1, in <module>
a, b, c = input()
ValueError: too many values to unpack (expected 3)
>>> a, b, c = input().split() # 一一对应多次赋值
1 2 3
>>> a
'1'
>>> b
'2'
(2)关于map()、list()
语法:map(function, iterable, …)
参数:
function----函数
iterable----一个或者多个序列,(不一定是数组)
返回值:
Python 2.x 返回列表。
Python 3.x 返回迭代器。 # 加list()返回列表
功能:会根据提供的函数对指定序列的每一个元素做映射
>>> a = input().split()
1 2 3 4
>>> a
['1', '2', '3', '4']
>>> b = map(int,a)
>>> b
<map object at 0x00000231C3CC5390> # 返回的是迭代器
>>> c = list(b) # 所以要使用list()函数得到列表
>>> c
[1, 2, 3, 4]
(3)关于sys.stdin.readline()
实现标准输入,需要调用sys库,sys.stdin是一个标准化输入的方法,其中默认输入的格式是字符串,如果是int,float类型则需要强制转换。
a, b ,c = map(int, sys.stdin.readline().split())
等价于
a, b ,c = map(int, input().split())
>>> name = sys.stdin.readline()
jsf
>>> print('Hello ', name)
Hello jsf
>>> m = sys.stdin.readline()
12
>>> m
'12\n' # 注意区别,如果不加strip(),则返回的是“字符串+\n”
>>> h = int(m)
>>> h
12
>>> n = sys.stdin.readline().strip() # 加了strip()之后就没有\n 了
12
>>> n
'12'
>>> h = int(n)
>>> h
12
5、链表
定义链表、正向遍历、反向遍历、反转链表
class ListNode(object):
def __init__(self,x,next=None):
self.val = x
self.next = next
class LinkList(object):
# 反转
def reserve(self, ListNode):
results = []
while ListNode:
results.insert(0, ListNode.val)
ListNode = ListNode.next
return results
if __name__ == '__main__':
s = LinkList()
head = None
# 创建链表,head为头节点
for x in range(4):
head = ListNode(x, next=head)
a = []
p = head
# 遍历链表
while p:
a.append(p.val)
p = p.next
print('顺序遍历,正向打印结果', a)
print('顺序遍历,反向打印结果', s.reserve(head))
# 反转链表, cur 指向原来的尾节点,原来头节点指向None
cur = None
pre = head
while pre:
# 要变的指针(.next)先缓存
temp = pre.next
pre.next = cur
cur = pre
pre = temp
q = cur
b = []
while q:
b.append(q.val)
q = q.next
print('顺序遍历反转后的链表', b)
d = {'1': 2, '3' : 4, '5' : 6}
for i in d: # in 字典遍历的 是键
print(i)
l = [1, 3 , 5]
for i in l: # 而数组遍历的是元素
print(i)
# 这里记得换成python3
n, k = map(int, input().split())
res = []
for _ in range(n):
tmp = list(map(int, input().split()))
res.append(tmp)
"""
输入:
5 3
2 11 21
19 10 1
20 11 1
6 15 24
18 27 36
"""
"""
输出:
n = 5 k = 3
res = [[2, 11, 21]
[19, 10, 1]
[20, 11, 1]
[6, 15, 24]
[18, 27, 36]]
"""
1.输入:一个数,输出:一个数
要用input()函数,且得到的为字符类型,使用时应当定义为整形变量:n = int(input())
输出时要使用print()函数,而不是像核心代码模式那样的最终返回一个结果
2.
# 招行2019编程题:挑选代表(找每个区间中的两个元素,要求最后得到的元素集合最短,也就是找到的元素尽量重复)
def slove(a):
a.sort()
set1=set()
for l in a:
s=l[-1]
e=l[0]
cn=0
for i in range(s,e+1):
if i in set1:
cn+=1
if cn==2:
break
if cn==0:
set1.add(e-1)
set1.add(e)
if cn==1:
set1.add(e)
return len(set1)
if __name__=="__main__":
n=int(input().strip())
a=[]
for i in range(n):
l=list(map(int,input().strip().split()))
a.append(l[::-1])
if n==0:
print(0)
else:
print(slove(a))