Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果元素(字符串)以字母/数字开头,如何选择列表组中的列表元素?_Python_String_List_Startswith - Fatal编程技术网

Python 如果元素(字符串)以字母/数字开头,如何选择列表组中的列表元素?

Python 如果元素(字符串)以字母/数字开头,如何选择列表组中的列表元素?,python,string,list,startswith,Python,String,List,Startswith,在这里,我想选择每个列表中满足以“6”开头条件的元素。然而,我没有找到实现它的方法 列表从数据帧转换而来: d = {'c1': ['64774', '60240', '60500', '19303', '38724', '11402'], 'c2': ['', '95868', '95867', '60271', '60502', '19125'], 'c3':['','','','','95867','60500']} df= pd.DataFrame(data=d)

在这里,我想选择每个列表中满足以“6”开头条件的元素。然而,我没有找到实现它的方法

列表从数据帧转换而来:

d = {'c1': ['64774', '60240', '60500', '19303', '38724', '11402'], 
     'c2': ['', '95868', '95867', '60271', '60502', '19125'],
     'c3':['','','','','95867','60500']} 
df= pd.DataFrame(data=d)
df
我试过这样的代码:

但是,对于满足条件的元素,它仅返回“6”

['6', '6', '6', '6', '6', '6', '6', '6', '6']
我要找的是一组列表,如:

试试这个:

flatten = lambda l: [[item] for sublist in l for item in sublist]
print( flatten([ df[col][df[col].str.startswith("6") ].tolist() for col in df]))

在这里,我使用了一个列表生成器,它在遍历列的同时收集列表中所有匹配的单元格;这将产生['64774','60240','60500'],['60271','60502'],['60500']。为了获得所需的输出,我定义了一个函数flatte,该函数在某种程度上将列表展平为['64774']、['60240']、['60500']、['60271']、['60502']、['60500']

您不需要将列表转换为strlist,因为它已经是字符串类型了

lst = df.values.tolist()
lst = [[i] for l in lst for i in l if i.startswith('6') ]
print(lst)
结果:

[['64774'], ['60240'], ['60500'], ['60271'], ['60502'], ['60500']]
当您使用list=strlist时,您正在将列表转换为字符串表示形式,即列表变为

[['64774', ], ['60240', '95868', ], ['60500', '95867', ], ['19303', '60271', ], ['38724', '60502', '95867'], ['11402', '19125', '60500']] 然后使用列表遍历字符串

[x代表列表中的x,如果x.starts带有'6'] 这将生成字符串中的每个单独字符,这意味着您只需在字符串中找到所有出现的6,从而得到

['6', '6', '6', '6', '6', '6', '6', '6', '6'] 旁注:不要使用隐藏内置函数的变量名,如list、dict等,这几乎肯定会导致后续问题

我不确定是否有任何特定的理由使用数据帧/熊猫来回答您的问题。如果没有,您可以简单地使用列表

d={ ‘c1’:[‘64774’、‘60240’、‘60500’、‘19303’、‘38724’、‘11402’], ‘c2’:[,‘95868’、‘95867’、‘60271’、‘60502’、‘19125’], “c3”:[,,,'95867','60500'] } d2=[[x]表示d中的v。如果x.starts带有'6',则x表示v中的x的值] d2:['64774']、['60240']、['60500']、['60271']、['60502']、['60500']]
无需将数组转换为列表,您只需使用首选值而非值对df中的arr执行[[a]即可。如果a.startswith'6'],则对a中的arr执行[u numpy]即可。感谢所有注释!!不客气。如果此处的一个答案解决了您的问题,请单击旁边的灰色复选标记将其标记为答案。
"[['64774'], ['60240'], ['60500'], ['60271'], ['60502'], ['60500']]"
flatten = lambda l: [[item] for sublist in l for item in sublist]
print( flatten([ df[col][df[col].str.startswith("6") ].tolist() for col in df]))
lst = df.values.tolist()
lst = [[i] for l in lst for i in l if i.startswith('6') ]
print(lst)
[['64774'], ['60240'], ['60500'], ['60271'], ['60502'], ['60500']]