这似乎对我来说很简单,但是我对此一无所知。可以说我有这样的列表:
# default settings for sessions
[DEFAULT]
FileStorePath=store
FileLogPath=log
ConnectionType=initiator
ReconnectInterval=60
SenderCompID=TW
[SESSION]
BeginString=FIX.4.2
ResetSeqNumFlag=Y
ResetOnLogon=Y
TargetCompID=ISLD
StartTime=00:00:00
EndTime=00:00:00
HeartBtInt=30
SocketConnectPort=50182
SocketConnectHost=127.0.0.1
DataDictionary=/Volumes/Untitled2/python_projects/FIX_api/spec/fix/FIX42.xml
LogonTimeout=50
CheckLatency = Y
MaxLatency = 120
我使用#!/usr/bin/env bash
users=$(aws iam list-users \
--query 'Users[].UserName' \
--output text
)
for user in $users ; do
groups=$(aws iam list-groups-for-user \
--user-name $user \
--query 'Groups[].GroupName' \
--output text \
| paste -s -d, - # join newlines as comma-separated values
)
printf "%s\t%s\n" $user $groups
done
使其与原始数据相似,但此处适用任何条件。现在,我想从列表中仅提取那些不是my_list=list(integer(0),c(4,3,3),integer(0),integer(0),c(5,2,5),integer(0))
的元素,从而像这样创建新的2元素列表:
integer(0)
我知道如何对数据框执行此操作,但是我不确定如何正确处理列表的每个元素。我尝试对每个元素使用条件integer(0)
,但这只是返回给我一个长度相同的新列表,其中每个元素都是答案(如果list_I_try_to_make=list(c(4,3,3),c(5,2,5))
仅返回lapply
)
答案 0 :(得分:2)
您可以使用lengths
my_list[lengths(my_list) > 0]
[[1]]
[1] 4 3 3
[[2]]
[1] 5 2 5
答案 1 :(得分:1)
这是一种解决方案:
my_list[ !unlist(lapply(my_list,identical,integer(0))) ]
答案 2 :(得分:1)
尝试一下:
my_filter=unlist(lapply(my_list,length))>0
my_list[my_filter]
[[1]]
[1] 4 3 3
[[2]]
[1] 5 2 5
答案 3 :(得分:1)
您可以使用Filter
:
my_list <- list(integer(0),c(4,3,3),integer(0),integer(0),c(5,2,5),integer(0))
Filter(function(x) length(x)>0, my_list)
# [[1]]
# [1] 4 3 3
#
# [[2]]
# [1] 5 2 5
答案 4 :(得分:0)
您可以使用purrr
软件包,在处理列表时非常方便。
library(purrr)
keep(my_list, function(x) length(x) > 0)