python怎么遍历一系列数_如何在Python中遍历一列?

I have seen answers about this question but no one helped me. Some used numpy, and some people answered using other platforms that help Python to be simpler. I don't want these type of things, I want with the simple Python without importing libraries or anything more.

Let's say: I would want to do a method that checks if there's at least one column in the 2D array that the column has the same values.

For example:

arr = [[2,0,3],[4,2,3],[1,0,3]]

Sending arr to my method would return True because in the third column there is in each term the number 3.

How would I write this method? How do I loop through each column in the 2D array?

解决方案

Loop through column

How do I loop through each column in the 2D array?

# zip(*matrix) generates a transposed version of your matrix

for column in zip(*matrix):

do_something(column)

An answer to your proposed problem/example

I would want to do a method that checks if there's at least one column

in the 2D array that the column has the same values

General method:

def check(matrix):

for column in zip(*matrix):

if column[1:] == column[:-1]:

return True

return False

One-liner:

arr = [[2,0,3],[4,2,3],[1,0,3]]

any([x[1:] == x[:-1] for x in zip(*arr)])

Explanation:

arr = [[2,0,3],[4,2,3],[1,0,3]]

# transpose the matrix

transposed = zip(*arr) # transposed = [(2, 4, 1), (0, 2, 0), (3, 3, 3)]

# x[1:] == x[:-1] is a trick.

# It checks if the subarrays {one of them by removing the first element (x[1:])

# and the other one by removing the last element (x[:-1])} are equals.

# They will be identical if all the elements are equal.

equals = [x[1:] == x[:-1] for x in transposed] # equals = [False, False, True]

# verify if at least one element of 'equals' is True

any(equals) # True

Update 01

@BenC wrote:

"You could also skip the [] around the list comprehension so that any

just gets a generator that can be stopped early once/if it returns

false"

so:

arr = [[2,0,3],[4,2,3],[1,0,3]]

any(x[1:] == x[:-1] for x in zip(*arr))

Update 02

You could also use sets (merged with the answer of @HelloV).

One-liner:

arr = [[2,0,3],[4,2,3],[1,0,3]]

any(len(set(x))==1 for x in zip(*arr))

General method:

def check(matrix):

for column in zip(*matrix):

if len(set(column)) == 1:

return True

return False

A set does not have repeated elements, so if you transform a list into a set set(x) any duplicated element goes away, so, if all elements are equals, the lenght of resulting set is equal to one len(set(x))==1.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值